2013-01-08 89 views
1

我需要一些關於排序多個數組的幫助。 這是我的了:在PHP中排序多陣列

Array ( 
    [ALU0000001] => 
     Array ([0] => Array ([period] => 2012 [codCurse] => S12-2030 [idPersona] => ALU0000001 [date] => 2012-04-02 [amount] => 238.00 [active] => X) 
       [1] => Array ([period] => 2012 [codCurse] => S12-2030 [idPersona] => ALU0000001 [date] => 2012-05-02 [amount] => 238.00 [active] => X) 
       [2] => Array ([period] => 2012 [codCurso] => S12-2030 [idPersona] => ALU0000001 [date] => 2012-06-02 [amount] => 238.00 [active] => X) 
       [3] => Array ([period] => 2013 [codCurso] => S12-2030 [idPersona] => ALU0000001 [date] => 2013-01-02 [amount] => 238.00 [active] => X) 

    [ALU0000005] => 
     Array ([0] => Array ([period] => 2013 [codCurse] => S13-2010 [idPersona] => ALU0000005 [date] => 2013-03-01 [amount] => 225.00 [active] => X) 
       [1] => Array ([period] => 2013 [codCurse] => S13-2010 [idPersona] => ALU0000005 [date] => 2013-03-02 [amount] => 333.00 [active] => X) 
       [2] => Array ([period] => 2013 [codCurse] => S13-2010 [idPersona] => ALU0000005 [date] => 2013-04-02 [amount] => 333.00 [active] => X) 

我需要一段時間來排序,多陣列來獲得這樣的

Y M D 
    2012 2012-04-02 ALU00000001 ..... 
    2012 2012-05-02 ALU00000005 ..... 
    2012 2012-06-01 ALU00000001 ..... 
    2013 2013-01-01 ALU00000001 ..... 
    2013 2013-06-01 ALU00000001 ..... 
    2013 2013-12-24 ALU00000005 ..... 

感謝

+0

你需要自定義排序功能:http://php.net/manual/en/function.usort.php – dmp

回答

0

考慮到主陣列按鍵不做多(因爲他們已經被date鍵包含的值之內),您可以放心地忽略它們。因此,首先要收集所有的值到一個單一的陣列可以在稍後進行排序:

$allItems = array(); 
foreach ($outputArr as $arr) { // $outputArr should be the name of your array 
    $allItems = array_merge($allItems,array_values($arr)); 
} 

然後,你需要通過date鍵陣列值進行排序:

function sortByDate($a,$b) { 
    $d1 = strtotime($a['date']); 
    $d2 = strtotime($b['date']); 
    return $d1 == $d2 ? 0 : ($d1 > $d2 ? 1 : -1); 
} 
usort($allItems,'sortByDate'); 
// and there you go. 
print_r($allItems); 
1

由於danp說,你將使用需要自定義排序功能PHP usort

您可以在Codeigniter中使用語法執行此操作;

usort($data_array, array('controller', 'sort_function')); 

function sort_function($a, $b) 
{ 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
}