考虑以下关联数组
$arr = Array
(
[banana] => 2
[cherry] => 1
[orange] => 3
[grapefruit] => 1
[apple] => 1
)
我想以类似于 PLSQL 术语的方式对其进行排序:(A DESC, B ASC
其中 A 是值,B 是键)含义:
$arr = Array
(
[orange] => 3
[banana] => 2
[apple] => 1
[cherry] => 1
[grapefruit] => 1
)
所以橙子和香蕉首先是因为价值,然后我有苹果,樱桃和葡萄柚按字母顺序排列,因为它们具有相同的价值。
我尝试了什么:
1. 运行ksort( )然后asort() / rsort()希望第二个排序将橙色和香蕉撞到数组的开头,而不会弄乱其他 3 个项目的字母排序。我错了。它确实把一切都搞砸了。所以我检查了:
2.排序函数和array_multisort()。但显然它一次对多个数组或多维数组进行排序。
3.我也尝试定义如下比较函数:
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;
}
}
}
}
并用usort()调用它,但它也不起作用。
所以我的问题是:是否有实现请求行为的 PHP 方法?
对于 Eugen:
我试过了,但在排序之前它不起作用:
Array
(
[lamb] => 3
[rule] => 1
[children] => 1
[teacher] => 2
[eager] => 1
)
排序后:
Array
(
[children] => 1
[eager] => 1
[rule] => 1
[teacher] => 2
[lamb] => 3
)