2010-10-28 132 views
2

我希望能够按元素数组的大小对此数组进行排序;按元素大小对多维数组进行排序

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

您是否正在寻找优雅或 “足够好”? – Jason 2010-10-28 06:31:56

回答

1

可以在2个步骤做到这一点。

  • 在步骤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

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()的返回值中查找它。

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