[英]PHP asort for sorting array items by values ASC?
对于asort
很奇怪,我想按值对数组中的项目进行排序,
$items = Array ( "1" => 10 , "11" => 10, "22" => 10 );
// Sort an array and maintain index association.
asort($items);
var_dump($items);
因此,由于所有值都相同 ,所以asort
不应做任何事情(我认为),但是我得到的结果是,
array (size=3)
22 => string '10' (length=2)
11 => string '10' (length=2)
1 => string '10' (length=2)
它会颠倒顺序! 为什么?
我想要的(我想应该是这样),
array (size=3)
1 => string '10' (length=2)
11 => string '10' (length=2)
22 => string '10' (length=2)
有任何想法吗?
编辑:
我在下面尝试过这个
// Comparison function
private function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
...
// Sort an array and maintain index association.
uasort($items, array($this, "cmp"));
但是我仍然得到相同的 “错误”结果。
由于版本4.1.0 PHP 排序由于排序算法而不稳定 ,该算法无法同时考虑值和键。 如果值相等,则必须使用自己的比较实现,并考虑键。 例如,您可以将原始数组值修改为(键,值)对,对数组进行排序并将其转换为一维后退。
$items = ["1" => 10, "11" => 10, "22" => 10];
$callback = function ($a, $b) use ($callback) {
$result = $a['value'] - $b['value'];
if ($result == 0) {
$result = $a['key'] - $b['key'];
}
return $result;
};
array_walk($items, function (&$value, $key) {
$value = ["key" => $key, "value" => $value];
});
usort($items, $callback);
$items = array_combine(array_column($items, 'key'), array_column($items, 'value'));
print_r($items);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.