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'];}