Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Podwójne iterowanie po tablicy each(), problem z resetowaniem
Zick4
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 12.10.2007

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


Mam menu rozwijane posiadające elementy oraz podelementy. U mnie $menu to obiekt klasy menu gdzie jest tablica elementów, a każdy element ma swoją tablicę podelementów. Obie tablice (elementów i podelementów) są indeksowane numerycznie. Jeżeli usuwam jakiś element bądz podelement unsetuje go. Przez to tworzy się tablica z dziurami. Poniższy przykład jest tylko oglądowy co chcę pokazać, bo tak naprawdę to są obiekty bardziej skomplikowane, które mają swoje właściwości i metody.
  1. <?php
  2. 0=>array(0=>'a', 1=>'b', 2=>'c'),
  3. 1=>array(0=>'a', 1=>'b', 2=>'c'),
  4. 2=>array(0=>'a', 1=>'b', 2=>'c')
  5. );
  6. ?>

Jeżeli teraz usunę element o indeksie 1 to pozostanie mi
  1. <?php
  2. 0=>array(0=>'a', 1=>'b', 2=>'c'),
  3. 2=>array(0=>'a', 1=>'b', 2=>'c')
  4. );
  5. ?>

i teraz jeszcze usunę podelement pierwszej tablicy o indeksie 1 to
  1. <?php
  2. 0=>array(0=>'a', 2=>'c'),
  3. 2=>array(0=>'a', 1=>'b', 2=>'c')
  4. );
  5. ?>

co mi bardzo nie odpowiada, bo zostają dziury więc napisałem funkcję porządkującą, która nie działa, bo według mnie resetowanie nie jest dobrze zrobione. Np. jeżeli zmodyfukiję trochę poniższą funkcję i zrobię tylko jedną pętle np. dla samym elementów, bądź dla samych podelementów to działa, ale jeżeli chcę zrobić obie i przejść przez wszystko to dochodzi tylko do pierwszego elementu zagłębia się do podelementów poprawia je ale już nie przechodzi do następnego elementu.
  1. <?php
  2. function uporzadkujMenu($menu)
  3. {
  4. reset ($menu->elementy);
  5. $tab = array();
  6. for ($index = 0; list ($klucz, $wartosc) = each($menu->elementy); $index++)
  7. {
  8. $tab[$index] = $wartosc;
  9. reset($tab[$index]->podelementy);
  10.  
  11. $tab2 = array();
  12. for ($i = 0; list ($klucz2, $wartosc2) = each($tab[$index]->podelementy); $i++)
  13. {
  14.  $tab2[$i] = $wartosc2;
  15. }
  16. $tab[$index] = $tab2;
  17. }
  18.  
  19. $menu->elementy = $tab;
  20. return $menu;
  21. }
  22. ?>

Jakieś pomysły?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jang
post
Post #2





Grupa: Zarejestrowani
Postów: 101
Pomógł: 11
Dołączył: 2.02.2005

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


  1. <?php
  2. $menu = array(
  3. 0=>array(0=>'a', 1=>'b', 2=>'c'),
  4. 2=>array(0=>'a', 2=>'c'),
  5. 5=>array(1=>'a', 3=>'b', 7=>'c'),
  6. );
  7. var_export ($menu);
  8. echo '<br /><br />';
  9.  
  10. function uporzadkujMenu($menu)
  11. {
  12. $tab = array();
  13. for ($index = 0; list ($klucz, $wartosc) = each($menu); $index++)
  14. {
  15. $tab[$index] = $wartosc;
  16.  
  17. $tab2 = array();
  18. for ($i = 0; list ($klucz2, $wartosc2) = each($tab[$index]); $i++)
  19. {
  20.  $tab2[$i] = $wartosc2;
  21. }
  22. $tab[$index] = $tab2;
  23. }
  24.  
  25. $menu = $tab;
  26. return $menu;
  27. }
  28.  
  29. $menu = uporzadkujMenu($menu);
  30. var_export ($menu);
  31. ?>

Wynik:
  1. array ( 0 => array ( 0 => 'a', 1 => 'b', 2 => 'c', ), 2 => array ( 0 => 'a', 2 => 'c', ), 5 => array ( 1 => 'a', 3 => 'b', 7 => 'c', ), )
  2.  
  3. array ( 0 => array ( 0 => 'a', 1 => 'b', 2 => 'c', ), 1 => array ( 0 => 'a', 1 => 'c', ), 2 => array ( 0 => 'a', 1 => 'b', 2 => 'c', ), )
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: 6.10.2025 - 05:38