按元素大小排序多维数组

时间:2010-10-28 06:22:32

标签: 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');
    [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');
)

3 个答案:

答案 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)

您可以分两步完成此操作。

  • 在步骤1中,对各个阵列进行排序 值。
  • 在步骤2中,首先对2D阵列进行排序 根据尺寸而不是尺寸 对价值观进行同等排序。

代码:

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

Code in Action