Autor Zpráva
xmark
Profil
Doposud jsem se obešel jak bez zpracování xml, tak bez asociativních polí, teď jsem narazil na vhodnou příležitost to použít a nevím jak na to.
Mám xml, v něm je jednak seznam kategorií a potom seznam produktů, kde každý produkt má mj. přiřazenou jednu z kategorií. Moje představe je taková, že vytáhnu seznam kategorií do pole, pak projedu všechny produkty a při výpisu k nim přilepím název kategorie z onoho pole, vytažený podle klíče.

Asi takto:
$xml = simplexml_load_file("data.xml");
$kategorie = array();

foreach ($xml->Kategorie as $value){ 
  echo $value->KategorieKod; // toto funguje
  array_push($kategorie, $value->KategorieKod, $value->KategorieNazev); // toto je špatně
}

foreach ($xml->Produkty->Produkt as $value){ 
  echo $value->Nazev; // toto funguje
  echo $kategorie[$value->KatKod]; // toto nefunguje
}


echo na řádcích 5 a 10 vypisuje to co má, takže načtení proběhne v pořádku.
array_push je tady použit špatně. Potřeboval bych do $kategorie přidat pár KategorieKod + KategorieNazev, ale nevím jak.
Další věc bude řazení. Potřeboval bych výstup seřadit podle kategorií. Výrobky jsou tak seřazeny, ale nechci se na to spoléhat.
Lamicz
Profil
Já osobně používám SimpleXML pouze pro čtení, když mám zapisovat používám plný DOM ( + DOMXPath). SimpleXML má velmi omezenou práci s XML.
btw co udělá

  array_push($kategorie, (string) $value->KategorieKod, (string) $value->KategorieNazev);
xmark
Profil
Problém není se SimpleXML, v něm budu chtít jen vyřešit jen to řazení. A když to nepůjde, věřím, že to přehrkám jiným způsobem.
Jde mi hlavně o nějakou alternativu k array_push, která by uměla pracovat s asociativním polem.
Alphard
Profil
http://cz.php.net/manual/en/simplexmlelement.addchild.php
xmark
Profil
Lamicz:
Tohle zafungovalo, ale jinak, než bych chtěl. Nevytvořilo to pole 2 x N, ale 1 x N. prostě to nastrkalo za sebe na střídačku >KategorieKod a KategorieNazev.
Alphard
Profil
xmark:
Promiň, chybně jsem pochopil, čeho chceš dosáhnout.
Když se teď na to dívám znovu, zdá se mi, že array_push() není vůbec potřeba, nestačilo by prosté vytvoření pole klíč => hodnota?

$xml = simplexml_load_file("data.xml");
$kategorie = array();

foreach ($xml->Kategorie as $value){ 
  echo $value->KategorieKod; // toto funguje
  $kategorie[(string) $value->KategorieKod] = (string) $value->KategorieNazev;
}

foreach ($xml->Produkty->Produkt as $value){ 
  echo $value->Nazev; // toto funguje
  echo $kategorie[(string) $value->KatKod]; 
}

Nebo mi opět něco uniká?
xmark
Profil
Alphard:
Nebo mi opět něco uniká?

Neuniká, funguje to přesně jak má, díky.
Šel jsem an to zbytečně složitě, tušil jsem to.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0