Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: array w array
Forum PHP.pl > Forum > PHP
damianooo
Witam ,
Mam taki oto problem:
W poniższym zadaniu potrzebuję wyświetlić listę z danymi. Wyświetla mi dane tak jak chcę jednak otrzymuję między wierszami taki komunikat z błędem
"Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\APSON\test3.php on line 43"

kod:

  1. $menu=array(
  2. "onas"=>"O nas",
  3. "oferta"=>array("Oferta",array(
  4. "strony"=>"Strony internetowe",
  5. "sklepy"=>"Sklepy internetowe",
  6. )),
  7. "kontakt"=>"Kontakt",
  8. );
  9.  
  10.  
  11. foreach($menu as $k=>$v)
  12. {
  13. echo "<li>".$k."</li>";
  14.  
  15. foreach($v as $a)
  16. {
  17. foreach($a as $c=>$d)
  18. {
  19. echo "<ul>".$d."</ul>";
  20. }
  21. }
  22. }



Co robię nie tak ?

dzięki
!*!
Chcesz wyciągnąć z foreach dane, których nie ma. Źle się zabrałeś do tego. Napisz funkcje, która pobierze z tablicy pierwszą serie menu, następnie sprawdzaj czy obecna pozycja ma w sobie array, jeśli tak, to wykonaj funkcje jeszcze raz. Poszukaj na forum pod nazwą "rekurencja", jest dużo przykładów.
damianooo
zrobiłem coś takiego

  1. $menu=array(
  2. "onas"=>"O nas",
  3. "oferta"=>array("Oferta",array(
  4. "strony"=>"Strony internetowe",
  5. "sklepy"=>"Sklepy internetowe",
  6. )),
  7. "kontakt"=>"Kontakt",
  8. );
  9.  
  10.  
  11. foreach($menu as $k=>$v)
  12. {
  13. if($v != array())
  14. {
  15. echo "<li>".$k."</li>";
  16. }
  17. elseif($v == array())
  18. {
  19. foreach($v as $a)
  20. {
  21. foreach($a as $c=>$d)
  22. {
  23. echo "<ul>".$d."</ul>";
  24. }
  25. }
  26. }
  27. }


ale tym razem wyświetla tylko pozycje pierwszego poziomu
Cysiaczek
  1. if($v != array()) // nie znam takiej konstrukcji. Zobacz z !is_array($v)
  2. {
  3. echo "<li>".$k."</li>";
  4. }


Po prostu masz bardz dużo błędów na poziomie składni języka, więc proponuję, abyś dokładniej przeczytał manual php.
IProSoft
  1. $menu = array(
  2. "onas" => "O nas",
  3. "oferta" => array(
  4. "Oferta",
  5. "strony"=>"Strony internetowe",
  6. "sklepy"=>"Sklepy internetowe",
  7. )
  8. ),
  9. "kontakt" => "Kontakt",
  10. );
  11.  
  12.  
  13. foreach($menu as $k=>$v)
  14. {
  15. if(!is_array( $v ))
  16. {
  17. echo "<li>".$k."</li>";
  18. }
  19. elseif( is_array( $v ) ) //choć tu może być samo else
  20. {
  21. foreach($v as $a)
  22. {
  23. if(!is_array( $a ))
  24. {
  25. echo "<li>".$a."</li>";
  26. }
  27. elseif( is_array( $a ) )
  28. {
  29. foreach($a as $c => $d)
  30. {
  31. echo "<ul>".$d."</ul>";
  32. }
  33. }
  34. }
  35. }
  36. }
damianooo
ok Panowie chyba się udało

  1. $menu=array(
  2. "onas"=>"O nas",
  3. "oferta"=>array("Oferta",array(
  4. "strony"=>"Strony internetowe",
  5. "sklepy"=>"Sklepy internetowe",
  6. )),
  7. "kontakt"=>"Kontakt",
  8. );
  9.  
  10.  
  11. foreach($menu as $k=>$v)
  12. {
  13. if(!is_array($v))
  14. {
  15. echo "<li>".$k."</li>";
  16. }
  17. else
  18. {
  19. foreach($v as $a)
  20. {
  21. if(!is_array($a))
  22. {
  23. echo "<li>".$k."</li>";
  24. }
  25. else
  26. {
  27. foreach($a as $c=>$d)
  28. {
  29. echo "<ul>".$d."</ul>";
  30. }
  31. }
  32. }
  33. }
  34. }


tylko nie wiem czy mam tylko takie wrażenie czy faktycznie wyświetla mi w niektórych miejscach puste dane i stąd mam odstępy między wierszami zbyt duże

P.S. ehh szkoda że Polska odpadła ...
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.