2010-10-28 4 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

ответ

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

Смежные вопросы