PHP:排序多数组结果
可能重复:PHP:排序多数组结果,php,sorting,multidimensional-array,Php,Sorting,Multidimensional Array,可能重复: 我有一个关于排序数组的简单问题。我只想通过asc或desc中的str或def对数组进行排序。php.net中的示例有点混乱,我想知道是否有人可以解决这个小难题 我知道我应该使用array\u multi\u sort 谢谢。试试php usort- 我还没有尝试运行代码,但它将是以下内容: function cmp($a, $b) { return strcmp($a['def'],$b['def']) } $a = yourArray[]; usort($a, "cm
我有一个关于排序数组的简单问题。我只想通过asc或desc中的str或def对数组进行排序。php.net中的示例有点混乱,我想知道是否有人可以解决这个小难题 我知道我应该使用array\u multi\u sort 谢谢。试试php usort- 我还没有尝试运行代码,但它将是以下内容:
function cmp($a, $b)
{
return strcmp($a['def'],$b['def'])
}
$a = yourArray[];
usort($a, "cmp");
这将遍历每个元素,并将数组元素作为参数传递,并使用自定义函数进行排序。使用usort函数。在你的情况下会是这样的:
function compare($valueA, $valueB) {
if ($valueA['str'] > $valueb['str']) {
return 1;
} else if ($valueA['str'] < $valueb['str']) {
return -1;
}
return 0;
}
usort($yourArray, "compare");
函数比较($valueA,$valueB){
如果($valueA['str']>$valueb['str']){
返回1;
}否则如果($valueA['str']<$valueb['str'])){
返回-1;
}
返回0;
}
usort($yourray,“compare”);
这是您的解决方案:
<?php
function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
usort($array, build_sorter('def'));
print_r($array);
?>
它将按您定义的键对所有数组进行排序。数组多重排序要求您构建一个数组,该数组包含要排序的键的值,以便执行您想要的操作,但具有与原始数组相同的第一维度键 因此,如果你制作一个数组,其中包含0=>10,1=>5。。。等等,如果这些是键0和1的str或def的值,那么您可以执行以下操作
foreach($originalArray as $key => $record) {
$keyValuesArray[$key] = $record['str'];
}
array_multisort($keyvaluesArray, SORT_ASC, $originalArray);
原始数组将被修改以进行排序
至于你应该做什么,我不认为数组多重排序是一种“方法”,但不是一种可怕的方法。其他解决方案可能会稍微更有效一些
foreach($originalArray as $key => $record) {
$keyValuesArray[$key] = $record['str'];
}
array_multisort($keyvaluesArray, SORT_ASC, $originalArray);