Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wielowymiarowe tablice
Forum PHP.pl > Forum > PHP
symonides
Cześć, zastanawiam się jak rozwiązać problem tablic wielowymiarowych, a mianowicie, mam tablicę jak ta poniżej i chciałbym wykonywać na niej operacie kolejnością wg kluczy, ale z tym że zaczynając od tej najbardziej zagnieżdżonej, czyli zaczynając $arr[1][2][2][2]. Jest jakiś sposób, bo z tego co mi się wydaje, to żeby poznać poziom zagnieżdżenia tablic to i tak będę musiał przejechać po tablicy, a później żeby wykonać operacje to znowu? Jak Wy byście to zrobili(najbardziej w sumie to głowię się nad tym podkreślonym).

  1. $arr = array(
  2. 1 => array(
  3. 1 => 'jeden',
  4. 2 => array(
  5. 1 => 'jeden',
  6. 2 => array(
  7. 1 => 'jeden',
  8. 2 => 8
  9. )
  10. )
  11. ),
  12. 2 => array(
  13. 1 => 'jeden',
  14. 2 => 6
  15. ),
  16. 3 => array(
  17. 1 => 'jeden',
  18. 2 => array(
  19. 1 => 'jeden',
  20. 2 => 9,
  21. 3 => 8
  22. )
  23. )
  24. );
cycofiasz
Pierwsze co mi przyszło do głowy to poustawiać każdej tablicy parametr "głębokość", stworzyć nową tablicę zawierającą pojedyncze tablice (nie posiadające żadnych podtablic) i posortować taką nowo utworzoną tablicę według parametru głębokość.

Do ustawiania głębokości można użyć funkcji: http://stackoverflow.com/questions/435180/...with-the-key-of
darko
Znaleźć najgłębszy poziom można np. tak:
  1. $arr = array(
  2. 1 => array(
  3. 1 => 'jeden',
  4. 2 => array(
  5. 1 => 'jeden',
  6. 2 => array(
  7. 1 => 'jeden',
  8. 2 => 8
  9. )
  10. )
  11. ),
  12. 2 => array(
  13. 1 => 'jeden',
  14. 2 => 6
  15. ),
  16. 3 => array(
  17. 1 => 'jeden',
  18. 2 => array(
  19. 1 => 'jeden',
  20. 2 => 9,
  21. 3 => 8
  22. )
  23. )
  24. );
  25. $nestedLevel = 0;
  26. function getMostNestedLeveL(array $arr)
  27. {
  28. global $nestedLevel;
  29. $return = false;
  30. $temp = array();
  31. foreach($arr as $k => $v)
  32. {
  33. if(is_array($v))
  34. {
  35. $return = true;
  36. $temp = $v;
  37. $nestedLevel++;
  38. }
  39. }
  40.  
  41. if($return)
  42. return getMostNestedLeveL($temp);
  43.  
  44. return $return;
  45. }
  46.  
  47.  
  48. while(getMostNestedLeveL($arr)) {}
  49.  
  50. echo $nestedLevel;

Resztę już chyba sobie dopiszesz ? ;P

//specjalny bonus w postaci linków:
http://stackoverflow.com/questions/96759/h...al-array-in-php
http://www.informit.com/articles/article.a...40&seqNum=6
http://www.firsttube.com/read/sorting-a-mu...array-with-php/
symonides
Dzięki. Jutro popróbuję i zobaczymy jak to będzie. Póki co dzięki i pozdrawiam.
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.