Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:排序多数组结果_Php_Sorting_Multidimensional Array - Fatal编程技术网

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);