Duplicitní názvy z $zzxx (Jak se zbavit) – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Duplicitní názvy z $zzxx (Jak se zbavit) – PHP – Fórum – Programujte.comDuplicitní názvy z $zzxx (Jak se zbavit) – PHP – Fórum – Programujte.com

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

webdorf0
Newbie
31. 10. 2016   #1
-
0
-

Chtěl bych se zeptat, 

Jak odstraním duplicitní názvy, které jsou brány pomocí:

$zzxx = $jedenslug->slug;
echo "$zzxx </br>";

A vypíšu jen unikátní názvy, na každý řádek jeden..?

Nahlásit jako SPAM
IP: 89.103.172.–
Kit+15
Guru
31. 10. 2016   #2
-
0
-

#1 webdorf
Nevidím žádné duplicitní názvy.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
webdorf0
Newbie
31. 10. 2016   #3
-
0
-

#2 Kit

Zkráceně tohle: $jedenslug->slug;  bere názvy (například) 

11-22-63 
12-monkeys 
16-a-tehotna 
1864 
2-socky 
24-hodin 
3-2-1-tucnaci 
30-pripadu-majora-zemana 
4400 
4teens 
666-park-avenue 
7-deadly-sins 
90210-nova-generace 
a-to-z 
about-a-boy 
aftermath 
agent-carter 
agent-x 
agents-of-s-h-i-e-l-d 
agentura-jasno 
akta-x 
alcatraz 
alf 
alias 
alias 
allegiance 

Jsou li dva názvy stejné, tak aby to vypsalo jen unikátní název... 

echo "$zzxx </br>";

Toto vypisuje všechny názvy.. 

Nahlásit jako SPAM
IP: 89.103.172.–
Kit+15
Guru
31. 10. 2016   #4
-
0
-

#3 webdorf
Tak to nasázej do množiny, duplicity tím zmizí.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
webdorf0
Newbie
31. 10. 2016   #5
-
0
-

#4 Kit
Jak prosím..?

Nahlásit jako SPAM
IP: 89.103.172.–
Kit+15
Guru
31. 10. 2016   #6
-
0
-

#5 webdorf
Když do množiny přidáš element, který v ní už je, tak se nepřidá a je v ní stále jen ten jeden.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
webdorf0
Newbie
31. 10. 2016   #7
-
0
-

#6 Kit
Nevím zda jsem to pochopil.. 

$zzxx = array_unique($jedenslug->slug);
            $slug = $zzxx;
            echo "$zzxx </br>"

Hází to: 
Warning: array_unique() expects parameter 1 to be array, object given in /

Nahlásit jako SPAM
IP: 89.103.172.–
Kit+15
Guru
31. 10. 2016   #8
-
0
-

#7 webdorf
Stěžuje si, že jsi jako parametr nezadal pole, ale objekt.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
webdorf0
Newbie
31. 10. 2016   #9
-
0
-

#8 Kit
Nějak to moc nechápu

Nahlásit jako SPAM
IP: 89.103.172.–
Kit+15
Guru
31. 10. 2016   #10
-
0
-

#9 webdorf
Tak to jsme dva. Co je v $jedenslug->slug ?

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
webdorf0
Newbie
31. 10. 2016   #11
-
0
-

   

$URL = 'url';
        $xmlstring = common::get_curl($URL);//file_get_contents($URL);
        $xml = simplexml_load_string($xmlstring, 'SimpleXMLElement', LIBXML_NOCDATA);

        foreach ($xml->serial as $jedenslug) {
            $nnn1 = $jedenslug->nazev;
            $nnn = $nnn1;
            $zzxx = array_unique($jedenslug->slug);
            $slug = $zzxx;
            echo "$zzxx </br>";
Nahlásit jako SPAM
IP: 89.103.172.–
Kit+15
Guru
31. 10. 2016   #12
-
0
-

#11 webdorf
To znamená, že v $jedenslug->slug máš vždy jen jednu konkrétní hodnotu. Jeden prvek z jednoho je vždy unikátní.
 

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
webdorf0
Newbie
31. 10. 2016   #13
-
0
-

#12 Kit
Když dám 

echo "$jedenslug->nazev </br>";

Vypíše to úplně všechny názvy (cca 960), problém je v tom že nějaké názvy jsou stejný, potřebuji vypsat jen názvy unikátní.. 

Nahlásit jako SPAM
IP: 89.103.172.–
Kit+15
Guru
31. 10. 2016   #14
-
0
-

#13 webdorf
To echo musíš dát mimo ten cyklus. Nejprve musíš v nějakém cyklu ty duplicity odstranit.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
webdorf0
Newbie
31. 10. 2016   #15
-
0
-

#14 Kit 

Zkoušel jsem to takto, ale nějak nejde

foreach ($xml->serial as $jedenslug) {
            $nnn1 = $jedenslug->nazev;
            $nnn = $nnn1;
            $zzxx = $jedenslug->slug;
            $slug = $zzxx;
            //echo "$zzxx </br>";
          
$pole = array();
if (!in_array($nnn, $pole)) {
  array_push($pole, $nnn);
    {echo "$nnn </br>";}
}

}
Nahlásit jako SPAM
IP: 89.103.172.–
Kit+15
Guru
31. 10. 2016   #16
-
0
-

#15 webdorf
Zkus to třeba takhle:

$url = 'url';
$xmlstring = file_get_contents($url);
$xml = simplexml_load_string($xmlstring, 'SimpleXMLElement', LIBXML_NOCDATA);

$nazvy = array();
foreach ($xml->serial as $polozka) {
    $nazvy[$polozka->nazev] = $polozka->slug;
}
foreach ($nazvy as $key => $value) {
    echo "$key $value<br>";
}
Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
webdorf0
Newbie
31. 10. 2016   #17
-
0
-

#16 Kit
Warning: Illegal offset type in on line 14

Nahlásit jako SPAM
IP: 89.103.172.–
Kit+15
Guru
31. 10. 2016   #18
-
0
-

#17 webdorf
To jsem psal z hlavy. Zřejmě některá z $polozka->nazev je prázdná, tak si to ošetři. Vypisuje to i něco jiného?

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
webdorf0
Newbie
31. 10. 2016   #19
-
0
-

#18 Kit
Právě, že ne.

Nějak se s tím štvu ale marně.

Nahlásit jako SPAM
IP: 89.103.172.–
Kit+15
Guru
31. 10. 2016   #20
-
0
-

#19 webdorf
Možná to říká, že $polozka->nazev není string, ale objekt. Tak to musíš na ten string překonvertovat.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:1026:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3714 příspěvků
1. 11. 2016   #21
-
0
-

Mozna je tam pole. Si to vypis a uvidis. bude to radek pred error hlaskou.

...
var_dump($polozka);
$nazvy[$polozka->nazev] = $polozka->slug;
...

Nahlásit jako SPAM
IP: 2001:718:2601:26c:8536:4f...–
peter
~ Anonymní uživatel
3714 příspěvků
1. 11. 2016   #22
-
0
-

K tomu predchozimu:

... tady schazi cyklem
$zzxx = $jedenslug->slug;
echo "$zzxx </br>";

$zzxx = array_unique($jedenslug->slug);
$slug = $zzxx; echo "$zzxx </br>"
... coz pak vysvetluje, proc tohle hlasi, ze to nemas v array, protoze $jedenslug->slug je string, jen jeden radek z pole. Ten by se sortoval jako pole pismenek a ne pole stringu.
Takze to musis cyklem presunout nejdriv do array a ne vypisovat pres echo.

Ja myslim, ze tam chces spis docilit
$nazvy[$polozka->slug] = $polozka->slug;
 

---

foreach ($xml->serial as $jedenslug) {
            $nnn1 = $jedenslug->nazev;
            $nnn = $nnn1;
            $zzxx = $jedenslug->slug;
            $slug = $zzxx;
            //echo "$zzxx </br>";
          
$pole = array();
if (!in_array($nnn, $pole)) {
  array_push($pole, $nnn);
    {echo "$nnn </br>";}
}

}

Ty nemas ani tuseni o php, programovani, ze? :) Tak to je forum Prace a zakazky, inzerce.

Vynecham ty php zapisy a zkusim to trochu popsat.

$xml->serial // je nejake pole, ktere vypada treba takto
[nazev => 'tonda', slug => 'pivas'] // [index => hodnota]

Polem se da listovat dvema zpusoby. Bud znas indexy-klice(key) (obvykle ciselne) a nebo prochazis cele pole (obvykle textove indexy).  

for (i=0; i<count(pole); i++)  // ciselne, index = i, polozka = pole[i]
foreach (pole as key=>value) // textove, index = key,  polozka = pole[key] = value
foreach (pole as value) // textove, polozka = value (kdyz nebudes pouzivat indexy pro dalsi php kod)

Takze v zavislosti na case dostanes toto

pole = [nazev => 'tonda', slug => 'pivas']
foreach (pole as value) ...

t = 0: value = 'tonda'
t = 1: value = 'pivas'
Za cyklem zustane jen
t = 2: value = 'pivas'

table = [
[nazev => 'tonda1', slug => 'pivas3'],
[nazev => 'tonda2', slug => 'pivas4']
]
foreach (table as row) // databazove
{
// row['nazev']
// row['slug']foreach (row as key => value)) {...}
}

Prvni foreach ulozi do row = [nazev => 'tonda1', slug => 'pivas3'],.
Druhy foreach uvnitr prvniho cyklu pak z kazdeho radku ziska jmeno sloupce key a hodnotu ve sloupci

---

pole2 = array_unique(pole1); // [array]
jedenslug->slug [string]

Predstav si pole [array] jako kosik jablek a retezec jako jedno jablko. To proste neni totez a php pochopitelne krici chybu.
Kdyz pouziji zapis jako u predchozich prikladu, tak 

row = [
'pivas3',
'pivas4'
]
row = array_unique(row); // ok
value = 'pivas3'; // pripadne by se to mohlo chovat jako row = ['p','i','v','a','s','3']; coz ale nechces
value = array_unique(value); // chyba

No, co s tim, sakra? Tak to uloz do pole, ne? 

foreach ($xml->serial as $polozka) {
    $nazvy[$polozka->nazev] = $polozka->slug;
}
$table = [class]
[nazev: 'tonda', slug: 'pivas'] nebo
[key: 'tonda', value: 'pivas']
$table2 = array();
foreach ($table as $row) {
    $table2[$row->nazev] = $row->slug; // nebo
    $table2[$row->key] = $row->value;
}

Cyklus vytvori table2 jako
[tonda: 'pivas']

Jenze table vypada treba takto
[nazev: ['tonda', 'kucera'], slug: 'pivas'] // nazev [array], slug [string]
[nazev: 'manas', slug: 'pivas'] // nazev [string], slug [string]
[nazev: , slug: 'pivas'] // nazev [null], slug [string]
[slug: 'pivas'] // nazev [undefined], slug [string]

Takze, pouzit pro tabulku 2 nazev nebylo nejstastnejsi reseni. A je treba to osetrit, prekonvertovat na string nebo cislo. Nebo proste nazev nepouzit a pro oboje pouzit slug
$table2[$row->slug] = $row->slug;
 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:8536:4f...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Co je to MFT a jak se ho zbavit — založil Martin Morawiec

Jak se zbavit malware na webu? — založil Jan Hrabovský

Duplicitní hodnoty ve slovníku — založil Edelstadt

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý