Witam,
mam problem z przetworzonymi danymi i nie chcą się posortować w tak jak ja żądam.
Korzystam/korzystałem z dwóch rozwiązań które tutaj przedstawię:
Na początek dane wejściowe - nieposortowane:
$dana[22]['punkty']=3
$dana[22]['gole']=3
$dana[22]['bilans']=1
$dana[37]['punkty']=0
$dana[37]['gole']=2
$dana[37]['bilans']=-1
$dana[3]['punkty']=3
$dana[3]['gole']=2
$dana[3]['bilans']=2
$dana[2]['punkty']=0
$dana[2]['gole']=0
$dana[2]['bilans']=-2
$dana[15]['punkty']=0
$dana[15]['gole']=1
$dana[15]['bilans']=-1
$dana[40]['punkty']=3
$dana[40]['gole']=2
$dana[40]['bilans']=1
$dana[19]['punkty']=1
$dana[19]['gole']=1
$dana[19]['bilans']=0
$dana[115]['punkty']=1
$dana[115]['gole']=1
$dana[115]['bilans']=0
$dana[24]['punkty']=3
$dana[24]['gole']=2
$dana[24]['bilans']=1
$dana[4]['punkty']=0
$dana[4]['gole']=1
$dana[4]['bilans']=-1
$dana[33]['punkty']=0
$dana[33]['gole']=1
$dana[33]['bilans']=-2
$dana[11]['punkty']=3
$dana[11]['gole']=3
$dana[11]['bilans']=2
Korzystając z funkcji
array_multisort()foreach ($klub as $k => $v) echo " <br/>\$dana[{$k}]['punkty']={$klub[$k]['punkty']}
<br/>\$dana[{$k}]['gole']={$klub[$k]['strzelone']}
<br/>\$dana[{$k}]['bilans']={$klub[$k]['bilans']}
";
Otrzymuje dane posortowane, ale wg ID, a na tym mi nie zależy.
Dlatego wykorzystałem funkcję
multisort() dodaną do komentarza funkcji
sort()a przeze mnie odrobinę zmodyfikowaną (chodzi o kolejnosć ASC na DESC)
function multisort($array, $sort_by, $key1, $key2=NULL, $key3=NULL, $key4=NULL, $key5=NULL, $key6=NULL)
{
// sort by ?
foreach ($array as $pos => $val)
$tmp_array[$pos] = $val[$sort_by];
// display however you want
foreach ($tmp_array as $pos => $val)
{
$return_array[$pos][$sort_by] = $array[$pos][$sort_by];
$return_array[$pos][$key1] = $array[$pos][$key1];
if (isset($key2)) $return_array[$pos][$key2] = $array[$pos][$key2]; if (isset($key3)) $return_array[$pos][$key3] = $array[$pos][$key3]; if (isset($key4)) $return_array[$pos][$key4] = $array[$pos][$key4]; if (isset($key5)) $return_array[$pos][$key5] = $array[$pos][$key5]; if (isset($key6)) $return_array[$pos][$key6] = $array[$pos][$key6]; }
return $return_array;
}
Skrypt sortuje bardzo dobrze. Tylko dot. subtablicy 'punkty'
ale pozostałe już nie sortuje.
jak naprawić ten błąd ? jak zmodyfikowac funkcję aby pozostałe klucze też sortowała ?
wyniki tej funkcji:
$dana[22]['punkty']=3 //Drugie miejsce
$dana[22]['gole']=3
$dana[22]['bilans']=1
$dana[40]['punkty']=3 //Piąte miejsce
$dana[40]['gole']=2
$dana[40]['bilans']=1
$dana[3]['punkty']=3 //Trzecie miejsce - przypadkiem trafiło
$dana[3]['gole']=2
$dana[3]['bilans']=2
$dana[24]['punkty']=3 //Czwarte miejsce - przypadkiem trafiło
$dana[24]['gole']=2
$dana[24]['bilans']=1
$dana[11]['punkty']=3 //Pierwsze miejsce
$dana[11]['gole']=3
$dana[11]['bilans']=2
$dana[115]['punkty']=1
$dana[115]['gole']=1
$dana[115]['bilans']=0
$dana[19]['punkty']=1
$dana[19]['gole']=1
$dana[19]['bilans']=0
$dana[4]['punkty']=0
$dana[4]['gole']=1
$dana[4]['bilans']=-1
$dana[33]['punkty']=0
$dana[33]['gole']=1
$dana[33]['bilans']=-2
$dana[2]['punkty']=0
$dana[2]['gole']=0
$dana[2]['bilans']=-2
$dana[37]['punkty']=0
$dana[37]['gole']=2
$dana[37]['bilans']=-1
$dana[15]['punkty']=0
$dana[15]['gole']=1
$dana[15]['bilans']=-1
Czy ktoś ma pomysł jak to rozwiązać ?
Szukając na forum, google - to tylko na php.net spotkałem rozwiązanie które mnie satysfakcjonowało, a na innych stronach ogranicza się bez ID. Inaczej się dzieje tak jak w przypadku funkcji array_multisort() Sortuje prawidłowo, to co chcę, ale nie przypisuje danych posortowanych do pierwszorzędnej tablicy.