Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> array('a','b','c') => $arr['a']['b']['c'], niby proste ale mam chwilowy brak pomysłów
rogeros
post
Post #1





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 10.04.2002
Skąd: Pruszków

Ostrzeżenie: (10%)
X----


Witajcie.
Mam dynamiczną tablice która zawiera w sobie zmienna ilość wartości.
np:

$nazwa="voipsklep.pl";
$tablica=array('a','b','c','d','e','f');

i z tej tablicy chciałbym zrobić tablicę wielowymiarową tak
aby kolejny element tablicy $tablica był kolejnym "wymiarem" nowej tablic.
Nie wiem jak to fachowo nazwać. ale wynik chciałbym taki

$nowa_tablica=array("a"=>
array("b"=>
array("c"=>
......
array("f"=>$nazwa)

to było przedstawienie obrazowe. w skrócie chodzi mi o:
$nowa_tablica['a']['b']['c']['d']['e']['f']=$nazwa;


Próbowałem na różne sposoby ale niestety nie mam pomysłów na rozwiązanie tego problemu.
Za pomoc wszystkim z góry dziękuje.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
rogeros
post
Post #2





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 10.04.2002
Skąd: Pruszków

Ostrzeżenie: (10%)
X----


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

  1. INSERT INTO `katalogi` (`id_kat`, `id_rodzic`, `nazwa`) VALUES
  2. (1, '0', 'telefony voip'),
  3. (2, '0|1', 'linksys'),
  4. (3, '0|1', 'polycom'),
  5. (4, '0', 'bramki voip'),
  6. (5, '0|4', 'atcom'),
  7. (6, '0|4|5', 'at1'),
  8. (7, '0|4|5|6', 'Nowa kategoria'),
  9. (8, '0|4|5', 'at2'),
  10. (9, '0|4', 'd-link'),
  11. (10, '0', 'routery voip');



na początku wyciągamy dane z bazy i wrzucamy je do tablicy
  1. <?php
  2. $wynik=mysql_query(&#092;"select * from katalogi\");
  3. $ilosc_wynikow=mysql_num_rows($wynik);
  4. for($i=0;$i<$ilosc_wynikow;$i++){
  5.    $baza=mysql_fetch_assoc($wynik);
  6.    $temp=explode(&#092;"|\",$baza[id_rodzic]);
  7.    $dane[]=array(&#092;"id\"=>$baza[id_kat],\"parent\"=>array_pop($temp),\"name\"=>$baza[nazwa]);
  8.  
  9. }
  10. ?>



następnie z danych z bazy tworzymy tablicę z katalogami i podkatalogami za pomocą funkcji

  1. <?php
  2. function createTree(&$arr, $parent=0)
  3. {
  4.    $tree=array();
  5.    foreach($arr as $key=>$el)
  6.    {
  7.        if($el['parent']==$parent)
  8.        {
  9.            $el['childs']=createTree($arr, $el['id']);
  10.            if(count($el['childs'])==0) unset($arr[$key]);
  11.            $tree[]=$el;
  12.        }
  13.    }
  14.    return $tree;
  15. }
  16. ?>



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

  1. <?php
  2. function createXml($arr, $tabs=0)
  3. {
  4.    $str='';
  5.    foreach($arr as $el)
  6.    {
  7.        
  8.        $str.=str_repeat(&#092;"\t\", $tabs).''.\"\n\";
  9.        $str.=createXml($el['childs'], $tabs+1);
  10.        $str.=str_repeat(&#092;"\t\", $tabs).''.\"\n\";
  11.    }
  12.    return $str;
  13. }
  14. ?>


i dzięki temu otrzymujemy piękny gotowy plik xml

  1. <item name="telefony voip" id="1">
  2.      <item name="polycom" id="3">
  3.      </item>
  4.      <item name="linksys" id="2">
  5.      </item>
  6. </item>
  7. <item name="bramki voip" id="4">
  8.      <item name="d-link" id="9">
  9.      </item>
  10.      <item name="atcom" id="5">
  11.            <item name="at2" id="8">
  12.            </item>
  13.            <item name="at1" id="6">
  14.                  <item name="Nowa kategoria" id="7">
  15.                  </item>
  16.            </item>
  17.      </item>
  18. </item>
  19. <item name="routery voip" id="10">
  20. </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



Ten post edytował ayeo 3.02.2009, 09:27:20
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 20:32