我有两个键值数组。两个数组中的键是相同的,但在第一个数组中,它们指向一个字符串标签,在第二个数组中,它们指向一个整数:
$labelArray (size=n)
ID_1 => LABEL_1
ID_2 => LABEL_2
...up to n items
$countArray (size=n)
ID_1 => Count_1
ID_2 => Count_1
...up to n items
我喜欢通过countArray的值来订购labelArray。到目前为止,我只提出了一个非常复杂的解决方案,在那里我单独订购密钥然后创建一个新的数组:
// my current (very convoluted solution)
$keys = array_keys($labelArray);
$orderByCount = function($a, $b) use ($countArray ) {
return $countArray [$b] - $countArray [$a];
};
usort($keys, $orderByCount);
$labelArrayNewOrder = array();
foreach ($keys as $key) {
$labelArrayNewOrder[$key] = $labelArray[$key];
}
有没有我不需要创建新数组的解决方案,只是重新排序现有的labelArray?
这应该是一个常见问题,但我无法在线找到解决方案。只指向多维数组(How do I Sort a Multidimensional Array in PHP)的排序,但我认为我的问题不同。
答案 0 :(得分:1)
不确定。由于您希望通过数组键的自定义函数进行排序,因此相应的工具将为uksort
。您可以直接在$orderByCount
比较器中使用它:
$orderByCount = function($a, $b) use ($countArray ) {
return $countArray [$b] - $countArray [$a];
};
uksort($labelArray, $orderByCount);
但有两点与您的问题没有直接关系:
return $x - $y
快捷方式,请非常小心!结果在解释之前被转换为整数,这意味着如果涉及的值是浮点数,您可能会得到错误的排序结果。在这种情况下,“计数”意味着这些值确实是整数并且不会出现问题,但需要牢记这一点。$orderByCountDesc
来帮助未来的代码读者。