Php 按数组元素对一组多维数组排序

Php 按数组元素对一组多维数组排序,php,multidimensional-array,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

假设我从这里开始:

$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);
如何按数组中元素的元素对这些元素进行排序


多维数组总是感觉有点超出了我的大脑所能处理的范围(--)(直到我把它们弄明白,它们看起来非常简单)

你想按“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");
通过输入键($a,$b)进行函数比较{
如果($a['int']=$b['int']){
返回0;
}
报税表($a['int']<$b['int'])?-1:1;
}
uasort($arr,“按输入键比较”);

首先,不要忘记更改用于引用数组的索引变量,因为现在基本数组中只有两个元素,因为您将$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
        }
    }
}
//获取基本数组中的元素数
对于($eye=0;$eye$arr[$jay+1][1]){
//然后交换这些值
$temp=$arr[$jay]
$arr[$jay]=$arr[$jay+1]
$arr[$jay+1]=$temp
}
}
}

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

PHP自2010年以来一直在使用。从PHP7开始,宇宙飞船操作员对三向排序进行了大量的卷积运算

usort($arr, function($a, $b){ return $a['int'] <=> $b['int']; });
usort($arr,function($a,$b){返回$a['int']$b['int'];});
在PHP7.4中,“arrow-function”语法消除了进程中的一些膨胀

usort($arr, fn($a, $b) => $a['int'] <=> $b['int']);
usort($arr,fn($a,$b)=>a['int']$b['int']);
spaceship操作符的神奇之处在于,它将数字字符串作为数字类型值进行比较,并将字符串作为字符串进行比较

更令人惊叹的是,如果您想声明多个排序规则,只需在运算符的两侧构建一个平衡数组

                          // sort by "int" values ASC, then "a" values ASC
usort($arr, fn($a, $b) => [$a['int'], $a['a']] <=> [$b['int'], $b['a']]);
//按“int”值ASC排序,然后按“a”值ASC排序
usort($arr,fn($a,$b)=>[$a['int'],$a['a']][$b['int'],$b['a']);

上面的在线演示:

大量重复。请看一下这些:Alt.:
函数通过int键($a,$b){返回$a['int]-$b['int'];}