我希望能够按元素数组的大小对此数组进行排序;
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');
)
答案 0 :(得分:4)
使用闭包(PHP 5.3):
usort($array, function($a, $b) { return count($a) - count($b); });
不使用闭包(PHP 5.2):
usort($array, create_function('$a, $b', 'return count($a) - count($b)'));
请注意,$array
将进行排序。不要在usort()
的返回值中查找它。
答案 1 :(得分:2)
我没有对此进行过测试,但我希望你能明白这一点。
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的信息 http://php.net/manual/en/function.usort.php
答案 2 :(得分:1)
您可以分两步完成此操作。
代码:
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;
}