我一直在解决以下问题。
我有这个阵列:
[596] => 2
[9] => 2
[358] => 2
[1579] => 1
[156] => 1
[576] => 1
[535] => 1
如您所见,值以降序排列,但键是随机的。我想密钥也可以排序DESC。我一直在玩array_multisort,但我无法解决它的问题。我遇到的第一个问题是array_multisort重新索引数字键。我更改为非数字变体的键,即k596等...这使我能够对键进行排序,但不像我想要的那样。
[k9] => 2
[k596] => 2
[k358] => 2
[k576] => 1
[k535] => 1
[k1579] => 1
[k156] => 1
我最终想看到的结果是:
[k596] => 2
[k358] => 2
[k9] => 2
[k1579] => 1
[k576] => 1
[k535] => 1
[k156] => 1
有人能帮助我吗?必须有一个简单的方法来做到这一点,对吗?
答案 0 :(得分:1)
好的,这个问题比我想的更棘手!给定一个数组$arry = array('a'=>'hilbert', 'b'=>'noether', 'c'=>'landau');
我会生成第二个包含这样的元组的数组:
$brry = array();
foreach($arry as $key => $value){
$brry[] = array($key,$value);
}
//Now $brry looks like:
//$brry:
// [0] => array('a','hilbert');
// [1] => array('b','noether');
// [2] => array('c','landau');
//now you can easily sort it!
usort($brry, "cmp");
//And then transform it back to the array structure you have before
foreach($brry as $value){
$crry[$value[0]] = $value[1];
}
//with this sorting function cmp:
function cmp($first, $second){
if(strcmp($first[1], $second[1]) != 0){
return strcmp($first[1], $second[1]);
}
else{
return strcmp($first[0], $second[0]);
}
}
函数cmp
现在按字符串排序strcmp("192","20") > 0
,而整数可能不是这样!
答案 1 :(得分:1)
uksort($array, function ($a, $b) use ($array) {
if ($array[$a] != $array[$b]) {
return $array[$a] - $array[$b];
}
return $a - $b;
});
插入适当的比较操作,仅使用-
作为示例。如果你依赖于PHP,这有点棘手。 5.3并且没有匿名功能。