Udało mi się rozwiązać problem za wielką zasługą kolegi
wookieb.
Bardzo mi pomógł. Chwała mu za to. Dzięki wookieb.
A oto rozwiązanie może się komuś przyda.
dane wejściowe z bazy danych
INSERT INTO `katalogi` (`id_kat`, `id_rodzic`, `nazwa`) VALUES
(1, '0', 'telefony voip'),
(2, '0|1', 'linksys'),
(3, '0|1', 'polycom'),
(4, '0', 'bramki voip'),
(5, '0|4', 'atcom'),
(6, '0|4|5', 'at1'),
(7, '0|4|5|6', 'Nowa kategoria'),
(8, '0|4|5', 'at2'),
(9, '0|4', 'd-link'),
(10, '0', 'routery voip');
na początku wyciągamy dane z bazy i wrzucamy je do tablicy
<?php
for($i=0;$i<$ilosc_wynikow;$i++){
$temp=explode(\"|\",$baza[id_rodzic]); $dane[]=array(\"id\"=>$baza[id_kat],\"parent\"=>array_pop($temp),\"name\"=>$baza[nazwa]);
}
?>
następnie z danych z bazy tworzymy tablicę z katalogami i podkatalogami za pomocą funkcji
<?php
function createTree(&$arr, $parent=0)
{
foreach($arr as $key=>$el)
{
if($el['parent']==$parent)
{
$el['childs']=createTree($arr, $el['id']);
$tree[]=$el;
}
}
return $tree;
}
?>
dzięki tej funkcji otrzymujemy tablicę w postaci drzewka z z katalogami i podkatalogami (w podkatalogach kolejne podkatalogi a w nich kolejne itd)
teraz zostało nam z takiej tablicy utworzyć xml-a. do tego użyjemy kolejnej funkcji
<?php
function createXml($arr, $tabs=0)
{
$str='';
foreach($arr as $el)
{
$str.=createXml($el['childs'], $tabs+1);
}
return $str;
}
?>
i dzięki temu otrzymujemy piękny gotowy plik xml
<item name="telefony voip" id="1">
<item name="polycom" id="3">
</item>
<item name="linksys" id="2">
</item>
</item>
<item name="bramki voip" id="4">
<item name="d-link" id="9">
</item>
<item name="atcom" id="5">
<item name="at2" id="8">
</item>
<item name="at1" id="6">
<item name="Nowa kategoria" id="7">
</item>
</item>
</item>
</item>
<item name="routery voip" id="10">
</item>
i to wszystko.
pozdrawiam i jeszcze raz dziękuje
wookieb.
Do administratorów. Przez pomyłkę utworzyłem nowy post zamiast odpowiedzieć na swój własny. bardzo proszę scalić tego posta z tematem Temat: arrayand39aand39and39band39and39cand39__arrand39aand39and39band39and39cand39.
// zrobione
// ayeo