按数组元素对一组多维数组进行排序

时间:2010-05-26 18:29:13

标签: php multidimensional-array

假设我已经从这里开始了:

$arr[0] = array('a' => 'a', 'int' => 10);
$arr[1] = array('a' => 'foo', 'int' => 5);
$arr[2] = array('a' => 'bar', 'int' => 12);

我想来这里:

$arr[0] = array('a' => 'foo', 'int' => 5);
$arr[1] = array('a' => 'a', 'int' => 10);
$arr[2] = array('a' => 'bar', 'int' => 12);

如何按这些元素的元素对数组中的元素进行排序?

多维数组总是感觉比我的大脑可以处理的更多(-_-)(直到我弄明白并且它们看起来非常简单)

3 个答案:

答案 0 :(得分:5)

您想通过“int”键的值来订购它们吗?

uasort 与回调函数一起使用:

function compare_by_int_key($a, $b) {
    if ($a['int'] == $b['int']) {
        return 0;
    }
    return ($a['int'] < $b['int']) ? -1 : 1;
}
uasort($arr, "compare_by_int_key");

答案 1 :(得分:0)

首先,不要忘记更改您用来引用数组的索引变量cuz现在您只在基础数组中有两个元素,因为您为$ arr [1]赋值两次。

以下是代码:

// for the number of elements in the base array
for ( $eye = 0; $eye < sizeOf($arr); $eye += 1) {
    // grab each element in the array
    for ( $jay = 0; $jay < sizeOf($arr); $jay += 1) {
        // if the second element of the base array's current element
        // is greater than the next one
        if ( $arr[$jay][1] > $arr[$jay + 1][1] ) {
            // then swap those values
            $temp = $arr[$jay]
            $arr[$jay] = $arr[$jay+1]
            $arr[$jay+1] = $temp
        }
    }
}

请记住,我没有测试此代码,因此您可能需要进行少量调试。这应该按照你想要的方式排序,有更快的方法来执行这个搜索,但这是简单的,我试着在评论代码中给你一些解释。

希望这有帮助, 大风

答案 2 :(得分:0)

PHP 从 2010 年开始出现。从 PHP7 开始,飞船算子从三向排序中提取了大量卷积。

resultdf <- purrr::map2_df(mapCO2, maTemp, CarboSolution)

从 PHP7.4 开始,“箭头函数”语法消除了流程中的一些膨胀。

usort($arr, function($a, $b){ return $a['int'] <=> $b['int']; });

宇宙飞船运算符的神奇之处在于它会将数字字符串作为数字类型值进行比较,并将字符串作为字符串进行比较。

更棒的是,如果你想说明多个排序规则,你只需要在运算符的两边建立一个平衡的数组。

usort($arr, fn($a, $b) => $a['int'] <=> $b['int']);

以上在线演示:https://3v4l.org/QjNg7