Php 按元素大小排序多维数组
我希望能够按照元素数组的大小对数组进行排序Php 按元素大小排序多维数组,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我希望能够按照元素数组的大小对数组进行排序 array( [0] => array( [0] => 'B', [1] => 'C'); [1] => array( [0] => 'B'); [2] => array( [0] => 'A', [1] => 'C'); [3] => array( [0] => 'A', [1] => 'B', [2] => 'C');
array(
[0] => array( [0] => 'B', [1] => 'C');
[1] => array( [0] => 'B');
[2] => array( [0] => 'A', [1] => 'C');
[3] => array( [0] => 'A', [1] => 'B', [2] => 'C');
[4] => array( [0] => 'C');
[5] => array( [0] => 'A');
[6] => array( [0] => 'A', [1] => 'B');
)
array(
[0] => array( [0] => 'A');
[1] => array( [0] => 'B');
[2] => array( [0] => 'C');
[3] => array( [0] => 'A', [1] => 'B');
[4] => array( [0] => 'A', [1] => 'C');
[5] => array( [0] => 'B', [1] => 'C');
[6] => array( [0] => 'A', [1] => 'B', [2] => 'C');
)
使用闭包(PHP5.3):
不使用闭包(PHP 5.2):
请注意,
$array
将被就地排序。不要在usort()
的返回值中查找它,我还没有测试过它,但我希望您能理解这一点
function yoursort($a,$b) {
if(!(is_array($a) && is_array($b)) return 0; // item of array is not an array
$cntA = sizeof($a);
$cntB = sizeof($b);
if($cntA!=$cntB) return $cntA-$cntB; // smaller array up
foreach($a as $key=>$val) {
$ordA = ord($a[$key]);
$ordB = ord($b[$key]);
if($ordA!=$ordB) return $ordA-$ordB; // sort sub array by alphabet
}
return 0; // items are equal
}
usort($yourarray,"yoursourt");
在这里你可以找到更多关于usort的信息
您可以通过两个步骤完成此操作
- 在步骤1中,对每个阵列进行排序 价值观
- 在步骤2中,首先对2D数组进行排序 基于大小,如果大小不一致 对值进行相等排序
foreach($key=>$val){
排序($input[$key]);
}
usort($input,“cmp”);
打印(输入);
功能cmp($a$b){
如果(计数($a)!=计数($b)){
返回计数($a)-计数($b);
}
对于($i=0;$i),你是在寻找优雅还是“足够好”?
usort($array, create_function('$a, $b', 'return count($a) - count($b)'));
function yoursort($a,$b) {
if(!(is_array($a) && is_array($b)) return 0; // item of array is not an array
$cntA = sizeof($a);
$cntB = sizeof($b);
if($cntA!=$cntB) return $cntA-$cntB; // smaller array up
foreach($a as $key=>$val) {
$ordA = ord($a[$key]);
$ordB = ord($b[$key]);
if($ordA!=$ordB) return $ordA-$ordB; // sort sub array by alphabet
}
return 0; // items are equal
}
usort($yourarray,"yoursourt");
foreach($input as $key => $val) {
sort($input[$key]);
}
usort($input, "cmp");
print_r($input);
function cmp($a,$b) {
if(count($a) != count($b)) {
return count($a) - count($b);
}
for($i=0;$i<count($a);$i++) {
if($a[$i] != $b[$i]) {
return strcmp($a[$i],$b[$i]);
}
}
return 0;
}