Zadejte hledaný výraz...

Jak odstranit duplicitní položky ve feedu?

Luděk Kvapil
verified
rating uzivatele
10. 11. 2015 14:10:56
Dělám feed pro srovnávače zboží. Problém je v tom, že mám duplicitní položky (několikrát stejnou URL). Potřeboval bych tedy duplicity odstranit.
Můj nefunkční kód:
A tohle se generuje foreach pro každou $item. Buď by tedy měl být ten filtr v tom foreach, nebo pak až v $obsah_souboru.
Nějaký nápad, jakým směrem mám bádat?
10. 11. 2015 14:10:56
https://webtrh.cz/diskuse/jak-odstranit-duplicitni-polozky-ve-feedu/#reply1152183
node
verified
rating uzivatele
(5 hodnocení)
10. 11. 2015 14:19:39
Tak si sprav pole kde url bude kluc a potom to implodni do stringu "/n"-kom
10. 11. 2015 14:19:39
https://webtrh.cz/diskuse/jak-odstranit-duplicitni-polozky-ve-feedu/#reply1152182
Pokud je duplicita jen v jedné položce, nejlehčí způsob jak zajistit unikátnost je použít URL jako klíč pole.
10. 11. 2015 14:21:01
https://webtrh.cz/diskuse/jak-odstranit-duplicitni-polozky-ve-feedu/#reply1152181
Luděk Kvapil
verified
rating uzivatele
10. 11. 2015 16:56:49
Já mám $item definovanou přes SimpleXML, tak se mi moc nedaří tam nacpat ten klíč, protože když si zvolím to URL, tak se mi to rozbije a URL se v sekci "co má dělat" nezobrazuje. Načítám to totiž z xml a pak exportuju do jiného xml (mezi tím jsou úpravy polí, které jsem odmazal).
10. 11. 2015 16:56:49
https://webtrh.cz/diskuse/jak-odstranit-duplicitni-polozky-ve-feedu/#reply1152180
tomas505
verified
rating uzivatele
(10 hodnocení)
10. 11. 2015 18:24:49
Záleží jak přesně chceš ten výsledek, jestli rovnou vypsat tak asi takhle:
$doneUrls = array();
foreach( $xml->xpath('/SHOP/SHOPITEM') as $item )
{
if(!in_array($item->URL, $doneUrls)){
$MANUFACTURER = $item-> MANUFACTURER;
$PRODUCTNAME= $item-> PRODUCT;
$URL = $item-> URL;
$ITEM_ID = $item-> ITEM_ID;
$EAN = $item-> EAN;
$PRICE_VAT = $item-> PRICE_VAT;
$DELIVERY_DATE = $item-> DELIVERY_DATE;
$DESCRIPTION = $item-> DESCRIPTION;
$IMGURL = $item-> IMGURL;
$MANUFACTURER = $item-> MANUFACTURER;
$obsah_souboru='
'.$ITEM_ID.'
'.$PRODUCTNAME.'
'.$PRODUCT.'
'.$DESCRIPTION.'
'.$URL.'
'.$IMGURL.'
'.$PRICE_VAT.'
'.$MANUFACTURER.'
'.$EAN.'
'.$DELIVERY_DATE.'
free_delivery
';
$doneUrls[] = $item->URL;
echo $obsah_souboru;
}
}
Jinak ta původní myšlenka byla asi taková:
$items = array();
foreach( $xml->xpath('/SHOP/SHOPITEM') as $item )
{
$MANUFACTURER = $item-> MANUFACTURER;
$PRODUCTNAME= $item-> PRODUCT;
$URL = $item-> URL;
$ITEM_ID = $item-> ITEM_ID;
$EAN = $item-> EAN;
$PRICE_VAT = $item-> PRICE_VAT;
$DELIVERY_DATE = $item-> DELIVERY_DATE;
$DESCRIPTION = $item-> DESCRIPTION;
$IMGURL = $item-> IMGURL;
$MANUFACTURER = $item-> MANUFACTURER;
$items = '
'.$ITEM_ID.'
'.$PRODUCTNAME.'
'.$PRODUCT.'
'.$DESCRIPTION.'
'.$URL.'
'.$IMGURL.'
'.$PRICE_VAT.'
'.$MANUFACTURER.'
'.$EAN.'
'.$DELIVERY_DATE.'
free_delivery
';
}
(v $items jsou všechny shopitem položky a každá má jedinečnou URL)
Rozdíl je taky v tom, že u prvního kódu se vypíše jen první shopitem záznam s danou URL (další se ignorují) a u druhého se do pole $items uloží vždy poslední shopitem s danou URL (přepisují se).
10. 11. 2015 18:24:49
https://webtrh.cz/diskuse/jak-odstranit-duplicitni-polozky-ve-feedu/#reply1152179
Luděk Kvapil
verified
rating uzivatele
12. 11. 2015 13:26:30
Stále to nefunguje, tak to zkouším jinou cestou. V názvu produktu jsou totiž různé texty, které oddělují varianty stejného produktu.
Takže jsem si zapsal:
Položky, které obsahují bílá, se nezobrazí, ale černá a modrá jo, jako by tam ten ereg vůbec nebyl.
---------- Příspěvek doplněn 12.11.2015 v 13:49 ----------
Už to funguje s
..to jsem zkoušel před tím snad milionkrát a nefungovalo to.. A najednou to jde. Nevím proč, ale už do toho raději štourat nebudu :D
---------- Příspěvek doplněn 12.11.2015 v 14:07 ----------
Ještě jeden dotaz... Potřeboval bych všechny výsledky uložit do souboru. Když je ve foreach ono echo $polozka; tak se vypíšou všechny, ale když si to nechám zapsat do souboru, tak se mi to pořád přepisuje a ve výsledku je v souboru jen jedna položka...
tisknu to jako $tisk = fopen('vysledny-soubor.xml', 'w+');
fwrite($fp, $polozka);
12. 11. 2015 13:26:30
https://webtrh.cz/diskuse/jak-odstranit-duplicitni-polozky-ve-feedu/#reply1152178
tomas505
verified
rating uzivatele
(10 hodnocení)
12. 11. 2015 14:49:48
tak jsou tam asi i různé url, jinak by to muselo fungovat
btw. ty dva kódy, co jsi teď napsal, by se měly chovat stejně
file_put_contents('vysledny-soubor.xml', $polozka . PHP_EOL, FILE_APPEND);
před foreachem bude asi vhodné soubor smazat, aby v něm nebyl export z více běhů scriptu
if(file_exists('vysledny-soubor.xml')) unlink('vysledny-soubor.xml');
12. 11. 2015 14:49:48
https://webtrh.cz/diskuse/jak-odstranit-duplicitni-polozky-ve-feedu/#reply1152177
Luděk Kvapil
verified
rating uzivatele
12. 11. 2015 16:32:17
Napsal tomas505;1240666
tak jsou tam asi i různé url, jinak by to muselo fungovat
btw. ty dva kódy, co jsi teď napsal, by se měly chovat stejně
file_put_contents('vysledny-soubor.xml', $polozka . PHP_EOL, FILE_APPEND);
před foreachem bude asi vhodné soubor smazat, aby v něm nebyl export z více běhů scriptu
if(file_exists('vysledny-soubor.xml')) unlink('vysledny-soubor.xml');
jj.. dík... To funguje. Jen se mi nevypíše hlavička a patička. A když je dám do foreach, tak jsou za každou item a když je to před foreach, tak se to zase nezapíše.
12. 11. 2015 16:32:17
https://webtrh.cz/diskuse/jak-odstranit-duplicitni-polozky-ve-feedu/#reply1152176
Vše, na co se ptáš, jsou zcela základní věci.
Nerozumíš tomu, jak funguje základní datový typ, array.
Nevíš, jak napsat správně podmínku.
Používáš funkci, která je už 6 let zastaralá a manuál varuje velkým písmem před jejím použitím (eregi).
Nevíš, jestli dřív smazat soubor, nebo do něj napsat hlavičku.
Nevíš, jak zapisovat do souboru.
Formátuješ kód jak tatar (existuje komunitní doporučení, jak a kam psát mezery, závorky, kde řádkovat, jak používat velká a malá písmena).
Doporučuju začít od začátku, čtením manuálu a aktuálních tutorialů.
Tohle všechno jsou vážně banální věci, kterým by šlo předejít tím, že strávíš jeden večer studiem.
12. 11. 2015 17:24:38
https://webtrh.cz/diskuse/jak-odstranit-duplicitni-polozky-ve-feedu/#reply1152175
Pro odpověď se přihlašte.
Přihlásit