Rozważmy następujący asocjacyjnamulti-rodzaj tablicy asocjacyjnej w PHP
$arr = Array
(
[banana] => 2
[cherry] => 1
[orange] => 3
[grapefruit] => 1
[apple] => 1
)
chcę rozwiązać to w sposób, który byłby podobny do terminu PLSQL: A DESC, B ASC
(gdzie A jest wartość i B jest kluczem) znaczenie:
$arr = Array
(
[orange] => 3
[banana] => 2
[apple] => 1
[cherry] => 1
[grapefruit] => 1
)
tak, pomarańczy i bananów są pierwsze ze względu na wartość, ale potem mam jabłko, wiśnia i grejpfruta w kolejności alfabetycznej, ponieważ mają tę samą wartość.
Co próbowałem:
1. uruchomić ksort() a następnie asort()/rsort() nadzieję, że drugi rodzaj będzie wpadać na pomarańczowo i banan na początku tablicy, nie brudząc się sortowania alfabetycznego pozostałych 3 pozycji . Myliłem się. to wszystko miesza. Więc sprawdziłem:
2. sort functions i array_multisort(). Ale najwyraźniej sortuje kilka tablic na raz lub tablicę wielowymiarową.
3. Próbowałem też zdefiniować następujące porównanie funkcji:
function cmp($a, $b)
{
foreach ($a as $key1 => $val1) {
foreach ($b as $key2 => $val2) {
if($val1 == $val2){
return strcmp($key1,$key2);
}
else if ($val1 > $val2){
return 1;
}
else{ // $val1 < $val2
return -1;
}
}
}
}
i nazywają go usort() ale to również nie działa.
Moje pytanie brzmi: czy istnieje metoda PHP, która implementuje żądane zachowanie?
Eugen:
Próbowałem i nie działa przed sortowaniem:
Array
(
[lamb] => 3
[rule] => 1
[children] => 1
[teacher] => 2
[eager] => 1
)
i po sortowaniu:
Array
(
[children] => 1
[eager] => 1
[rule] => 1
[teacher] => 2
[lamb] => 3
)
Jak będzie używana wynikowy tablicę? – Galen
@ Galena w bardzo wyrafinowany i potężny sposób, którego nigdy nie widziano na Ziemi;) – alfasin
Jeśli chodzi o pierwsze podejście, nie działało, ponieważ sortowanie PHP nie jest stabilne (tj. Zachowuje porządek na równych wartościach). – Sarke