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);
(
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
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 ;)