2009-05-25 24 views
2

私は多次元配列を基本的に持っています。私は、データの3年分を持っていたのであれば、例えば、それは次のようになります。配列の次元を知らないarray_multisortを使用して多次元配列をソート

$data[0] = Array(0,1,2,3,4,5,6,7); 
$data[1] = Array(6,5,4,3,6,7,8,9); 
$data[2] = Array(1,4,2,5,7,3,1,4); 

を今私は年の1に基づいて、これらの配列を並べ替えることができるようにしたいです。たとえば、2年目に基づいてソートすると、$ dataの並べ替えに基づいてソートされます(1)。

私はarray_multisortで簡単にこれを行うことができます。大丈夫ですが、私はそこになりますどのように多くの年のデータの知らない

array_multisort($data[1],SORT_ASC,$data[0],$data[2]); 

。私は議論の正しい数を指定するいくつかの方法が欲しいですが、私はPHPでそれを行う方法がわかりません、私はちょうど各年のためにifステートメントを持っていなければ、信じられないほど痛いようです:

if ($num_years == 1) 
{ 
    array_multisort($data[$which_year],SORT_ASC); 
} 
else if ($num_years == 2) 
{ 
    array_multisort($data[$which_year],SORT_ASC,$data[0],$data[1]); // this does work, interestingly, in spite of the repetition... 
} 

誰かがもっと良い方法を知っていますか?

答えて

5

call_user_func_arrayを常に使用して、array_multisortを最初のパラメータとして指定し、array_multisortに渡すパラメータの配列を構築できます。次のようなもの:

$params = array(); 
foreach($data as $year){ 
    $params[] = $year; 
} 
call_user_func_array('array_multisort', $params); 
+0

Ah!クール。それはまさに私が必要なもののように聞こえる。やってみます。 – Ben

+0

それは動作します! 1つのこと:配列を$ params配列に参照で追加する必要があります。それ以外の場合は動作しません。だから:$ params [] = &$year; – Ben