问题描述
从此数组开始:
$TEST=array (
0 => array ( 0 => 'b',1 => 'y',2 => 'O',),1 => array ( 0 => 'a',1 => 'z',2 => array ( 0 => 'c',1 => 'x',)
如何对其进行排序? (基于第二个元素的xyz):
$TEST=array (
2 => array ( 0 => 'c',0 => array ( 0 => 'b',)
简单的asort($TEST)
的结果是(基于第一个元素的abc):
$TEST=array (
1 => array ( 0 => 'a',)
解决方法
您可以使用以下一行代码来做到这一点:
array_multisort( array_column($yourArray,$index),SORT_ASC,$yourArray );
在您的情况下,这是使用方法:
$TEST=array (
0 => array ( 0 => 'b',1 => 'y',2 => 'O',),1 => array ( 0 => 'a',1 => 'z',2 => array ( 0 => 'c',1 => 'x',)
array_multisort( array_column($TEST,1),$TEST );
print_r($TEST);
在http://php.net/manual/en/function.array-multisort.php
处检查array_multisort ,带有太空飞船的显式uasort:
<?php
$items = [
0 => [ 0 => 'b',2 => 'O' ],2 => [ 0 => 'c',1 => [ 0 => 'a',2 => 'O' ]
];
uasort($items,function($a,$b) { return $a[1] <=> $b[1]; });
var_export($items);
输出:
array (
2 =>
array (
0 => 'c',0 =>
array (
0 => 'b',1 =>
array (
0 => 'a',)
用短箭头功能表示法书写:
uasort($items,fn($a,$b) => $a[1] <=> $b[1]);