Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> array w array, problem z wyświetleniem listy z MENU
damianooo
post 16.06.2012, 18:31:20
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
!*!
post 16.06.2012, 18:44:26
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
damianooo
post 16.06.2012, 22:40:20
Post #3





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Cysiaczek
post 16.06.2012, 22:55:25
Post #4





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




  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.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
IProSoft
post 16.06.2012, 23:00:25
Post #5





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

Ostrzeżenie: (0%)
-----


  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. }


--------------------
Manual prawdę Ci powie.
Go to the top of the page
+Quote Post
damianooo
post 16.06.2012, 23:01:21
Post #6





Grupa: Zarejestrowani
Postów: 493
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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 ...

Ten post edytował damianooo 16.06.2012, 23:02:10
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 14:12