Arr::sort()辅助函数对多维数组的排序

Laravel框架
462
0
0
2022-04-21
标签   Laravel基础

根据二维键的值排序

use Arr;
Route::get('test', function (){
$arr = [];
$arr[0]['score']['grade'] = 3;
$arr[0]['times'] = 2;
$arr[5]['score']['grade'] = 2;
$arr[5]['times'] = 3;
$a = Arr::sort($arr, function ($value) {return $value['times'];});dd($a);
});

打印结果

array:2 [▼
0 => array:2 [▼
"score" => array:1 [▶]"times" => 2]5 => array:2 [▼
"score" => array:1 [▶]"times" => 3]
]

根据三维键的值排序

use Arr;
Route::get('test', function (){
$arr = [];
$arr[0]['score']['grade'] = 3;
$arr[0]['times'] = 2;
$arr[5]['score']['grade'] = 2;
$arr[5]['times'] = 3;
$a = Arr::sort($arr, function ($value) {return $value['score']['grade'];});dd($a);
});

打印结果

array:2 [▼
5 => array:2 [▼
"score" => array:1 [▼
"grade" => 2]"times" => 3]0 => array:2 [▼
"score" => array:1 [▼
"grade" => 3]"times" => 2]
]

全是数字键的多维数组

use Arr;
Route::get('test', function (){
$arr2[0][0][0] = 2;
$arr2[0][0][1] = 1;
$arr2[1][0][0] = 1;
$arr2[1][0][1] = 2;
$a = Arr::sort($arr2);});dd($a);
});

打印结果

array:2 [▼
1 => array:1 [▼
0 => array:2 [▼
0 => 11 => 2]]0 => array:1 [▼
0 => array:2 [▼
0 => 21 => 1]]
]

以下操作都是错误操作

尝试按一维键的值排序

use Arr;
Route::get('test', function (){
$arr1['a']['a1']['a11'] = 3;
$arr1['a']['a1']['a12'] = 2;
$arr1['a']['a2']['a21'] = 2;
$arr1['a']['a2']['a22'] = 3;
$a = Arr::sort($arr1, function ($value) {return $value['a'];});dd($a);
});

打印结果

这个会报错,找不到索引

尝试根据键的值是数组的二维键的值排序

use Arr;
Route::get('test', function (){
$arr = [];
$arr[0]['score']['grade'] = 3;
$arr[0]['times'] = 2;
$arr[5]['score']['grade'] = 2;
$arr[5]['times'] = 3;
$a = Arr::sort($arr, function ($value) {return $value['score'];});dd($a);
});

打印结果

array:2 [▼
5 => array:2 [▼
"score" => array:1 [▼
"grade" => 2]"times" => 3]0 => array:2 [▼
"score" => array:1 [▼
"grade" => 3]"times" => 2]
]

貌似并未排序,应该是无效操作,原因不明

结论

  • 不管是几维数组,也不管数组键是数字还是字符串,这个方法不会改变值对应的键;
  • 传递闭包的话,是从第二个维度以及之后找索引的
  • 若根据传递的索引找不到值,那么结果是无效的(传递的索引后面的键如果都是数字的话,是可以找到值的,默认是取第一值)
  • 三维数组,应该按这种方式传数组,value[string_key1][string_key2]
  • 全是数字键的多维数组,默认是取第一个值来做比较,例如
$arr2[0][0][0] = 2;
$arr2[0][0][1] = 1;
$arr2[1][0][0] = 1;
$arr2[1][0][1] = 2;
  • 取的是$arr2[0][0][0] = 2;$arr2[1][0][0] = 1;做比较的。