Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Podwójne iterowanie po tablicy each(), problem z resetowaniem
Zick4
post 15.11.2007, 08:51:58
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

Posty w temacie


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: 16.07.2025 - 20:09