按数组元素排序一个多维数组集合

4

假设我从这里开始:

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

And I want to get here:

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

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

多维数组总是让人感觉有些难以理解(-_-)(直到我弄清楚它们,它们似乎变得超级容易)。


有很多重复的内容。请查看以下链接:http://stackoverflow.com/search?q=php+sort+multidimensional+array - Felix Kling
3个回答

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

2
Alt.: function compare_by_int_key($a, $b) { return $a['int'] - $b['int']; }替代方案:function compare_by_int_key($a, $b) { return $a['int'] - $b['int']; } - jensgram

1

自2010年以来,PHP已经发展了很长一段路。从PHP7开始,太空船操作符大大简化了三向排序的复杂性。

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

从PHP7.4开始,“箭头函数”语法减少了一些冗余步骤。
usort($arr, fn($a, $b) => $a['int'] <=> $b['int']);

太空船运算符的神奇之处在于它将数字字符串作为数字类型值进行比较,将字符串作为字符串进行比较。
更进一步的优秀之处在于,如果你想要陈述多个排序规则,你只需要在运算符两侧构建一个平衡的数组即可。
                          // sort by "int" values ASC, then "a" values ASC
usort($arr, fn($a, $b) => [$a['int'], $a['a']] <=> [$b['int'], $b['a']]);

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


0
首先,不要忘记更改您正在使用的索引变量以引用数组,因为现在基本数组中只有两个元素,因为您将值分配给了$ 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
        }
    }
}

请注意,我没有测试过这段代码,所以您可能需要进行少量的调试。这应该可以按照您想要的方式进行排序,虽然有更快的方法来执行此搜索,但这是最简单的方法,并且我尝试在注释代码中给出一些解释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接