![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 16.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Nie wiem juz oco chodzi, i co jest nie tak, w tym kodzie ponizej. Krotki opis: jest sobie tablica $tablica, w ktorej sa przechowywane wartosci: jako klucz nr wskazujacy na dzieciaka, a jako wartosc indeksu nr opisujacy do kogo nalezy dany dzieciak (wiem wiem, dziwnie to brzmi, ale jest to wycinake wiekszego fragmentu kodu). Jezeli wartosc klucza dla danego indeksu jest = 0 to oznacza ze ten indeks jest rodzicem dla calej nizszej grupy. Kod $tablica = Array ( 1798 => 0, 1799 => 1798, 1801 => 1799, 1813 => 1801, 1800 => 1798, 1802 => 0, 1803 => 1802, 1804 => 1802, 1805 => 1804, 1811 => 1802, 1812 => 1811, 1807 => 0, 1808 => 1807, 1810 => 1808, 1814 => 1810, 1809 => 1807, 1815 => 1807 ); function takieCos($tab, $search = 0, $rootOnly = 0, $skad = 0, $ktory = 0, $nastepny = 0 ) { if ($tmp = array_keys($tab, $search)) {//1 foreach ($tmp as $tmpFolder) { if (array_keys($tab, $tmpFolder)) { //3 switch ($rootOnly) { case 0: $op .= "Opcja ZERO"; break; case 1: $op .= "<br>rodzic[".$ktory."][".$nastepny++."]=".$tmpFolder."\n"; break; case 2: if ($skad == 0) { $ktory++; $nastepny = 0; $op .= "<br>"; } $op .= "<br>rodzic[".$ktory."][".$nastepny++."]=".$tmpFolder."\n"; $op .= takieCos($tab, $tmpFolder, $rootOnly, 1, $ktory, $nastepny++); break; }//switch }//if 3 else { if ($rootOnly != 2) $op .= "<br>OPCJA rootOnly != 2"; else { $op .= "<br>rodzic[".$ktory."][".$nastepny++."]=".$tmpFolder ."\n"; } }//else if 3 }//foreach }//if 1 return $op; } echo "Wyswietlam tylko rodzicow:"; echo takieCos($tablica,0, 1); echo "<br><br>Wyswietlam dzieci dla kazdego rodzica:"; echo takieCos($tablica,0, 2); I teraz tak, po uruchomieniu i wywloaniu 2 razy tej funkcji otrzymujemy jako wynik: Kod Wyswietlam tylko rodzicow: rodzic[0][0]=1798 rodzic[0][1]=1802 rodzic[0][2]=1807 Wyswietlam dzieci dla kazdego rodzica: rodzic[1][0]=1798 rodzic[1][1]=1799 rodzic[1][2]=1801 rodzic[1][<FONT color=#ff0000>3</FONT>]=1813 rodzic[1][<FONT color=#ff0000>3</FONT>]=1800 rodzic[2][0]=1802 rodzic[2][1]=1803 rodzic[2][2]=1804 rodzic[2][3]=1805 rodzic[2][4]=1811 rodzic[2][5]=1812 rodzic[3][0]=1807 rodzic[3][1]=1808 rodzic[3][2]=1810 rodzic[3][<FONT color=#ff0000>3</FONT>]=1814 rodzic[3][<FONT color=#ff0000>3</FONT>]=1809 rodzic[3][4]=1815 I teraz moj problem a zarazem niewiedza - dlaczego dla rodzica 1798 indeks sie powtarza (pozycja 3 i 3 - oznaczone na czerwono), i tak samo jest dla rodzica 1807 (pozycja 3 i 3)? Dlaczego w tych przypadkach $nastepny++ nie zwieksza poprawnie swojej wartosci? Mam u siebie PHP 5.2 i takie cos sie dzieje. Czy ktos moze mi pomoc wyjasnic w czym jest problem, po prostu chce aby rodzic[][x] x zmienialo sie poprawnie od 0 do x co krok 1, a nie dublowalo wartosci. Z gory dziekuje za wszelka pomoc, bo juz nie wiem co jest nie tak ;) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 21:22 |