Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Stworzenie tablicy wielowymiarowej
Forum PHP.pl > Forum > Przedszkole
camikazee
Witam!

Siedzę już jakiś czas nad ponoć prostą funkcją i nie mogę wymóżdżyć jej sad.gif Chodzi mi o zrobienie tablicy wielowymiarowej.
Mam tablicę kilkuset wartości w postaci:
Kategoria-Podkategoria-Podkategoria...
Rozbijam je explodem na tablice w postaći
  1. <?php
  2. (
  3. [0] => Kategoria
  4. [1] => Podkategoria Piedrwsza
  5. [2] => Podkategoria Druga
  6. )
  7. ?>


I teraz utworzyć tablicę:

  1. <?php
  2. (
  3. [name] => Kategoria
  4. [child] => Array (
  5. [name] => Podkategoria Pierwsza
  6. [child] => Array (
  7. [name] => Podkategoria Druga
  8. [child] => brak
  9. )
  10.  )
  11. )
  12. ?>


Robiłem rekurencją, na różne sposoby. Czuje, że rozwiązanie jest proste jak barszcz, ale nie mogę dojść :/
Foxx
  1. <?php
  2. $tablicaTablic = array(array("kat1", "podkat1", "podpodkat1"), array("kat2", "podkat2", "podpodkat2"));
  3. $tablicaWynikow = array();
  4.  
  5. foreach($tablicaTablic as $tablica){
  6. $tablicaWynikow[] = array("name" => $tablica[0], "child" => array("name" => $tablica[1], "child" => array("name" => $tablica[2], "child" => "brak")));
  7. }
  8.  
  9. print_r($tablicaWynikow);
  10. ?>
camikazee
Wyraziłem się trochę nieprecyzyjnie tongue.gif Nie chodziło mi by to z manuala zrobić tylko aby każda tablicę w pierwszej postaci przekształcał na tablicę drugiej postaci. Napisałem taka funkcję:

  1. <?php
  2. public function buildArrTemp($arrTemp) {
  3. $arrCount = count($arrTemp);
  4. if ( $arrCount > 0 ) {
  5. if ( !is_array($resultTable) ) {
  6. $resultTable = array();
  7. }
  8.  
  9. $resultTable['name'] = $arrTemp[0];
  10. array_shift($arrTemp);
  11. if ( $arrCount == 1 ) {
  12. $resultTable['child'] = 'brak';
  13. }
  14. else {
  15. $resultTable['child'] = $this->buildArrTemp($arrTemp);
  16. }
  17. }
  18. return $resultTable;
  19. }
  20. ?>


Jest to w sumie funkcja klasy. Działa dobrze, ale czy nie można tego jakoś prościej napisać?
Foxx
No, nie mogłem przewidzieć, jak wygląda Twoja metoda smile.gif
Może tak:
  1. <?php
  2. public function buildArrTemp($arrTemp) {
  3.  $resultTable['name'] = $arrTemp[0];
  4.  array_shift($arrTemp);
  5.  
  6.  if (count($arrTemp) == 0){
  7. $resultTable['child'] = 'brak';
  8.  } else {
  9. $resultTable['child'] = $this->buildArrTemp($arrTemp);
  10.  }
  11.  return $resultTable;
  12. }
  13. ?>
Cysiaczek
Popraw proszę tytuł topiku na zgodny z zasadami forum Przedszkole
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.