1

次の構造の配列があります。

for ($i = 0; $i < SOME_NUMBER; $i++) {
   $arr[$i][] = $info_1;
   $arr[$i][] = $info_2;
   $arr[$i][] = $info_3;
   $arr[$i][] = $DATE;
   $arr[$i][] = $info_4;
}

この配列を でソートする必要があります$DATE。今、配列の構造を変更することはできません。キーを変更することはできません。$arr並べ替えは可能ですか$DATE

例:

 after running the loop for 2 times $arr is equal to:

 $arr[0][0] = 'Some Info 1.1';
 $arr[0][1] = 'Some Info 1.2';
 $arr[0][2] = 'Some Info 1.3';
 $arr[0][3] = '05-08-2010';
 $arr[0][4] = 'Some Info 1.4';

 $arr[1][0] = 'Some Info 2.1';
 $arr[1][1] = 'Some Info 2.2';
 $arr[1][2] = 'Some Info 2.3';
 $arr[1][3] = '01-08-2011';
 $arr[1][4] = 'Some Info 2.4';

予想される出力は次のようになります。

 $arr[0][0] = 'Some Info 2.1';
 $arr[0][1] = 'Some Info 2.2';
 $arr[0][2] = 'Some Info 2.3';
 $arr[0][3] = '01-08-2011';
 $arr[0][4] = 'Some Info 2.4';

 $arr[1][0] = 'Some Info 1.1';
 $arr[1][1] = 'Some Info 1.2';
 $arr[1][2] = 'Some Info 1.3';
 $arr[1][3] = '05-08-2010';
 $arr[1][4] = 'Some Info 1.4';

使用してarray_sortもうまくいきませんでした。

4

2 に答える 2

4

strtotime()比較に基づいて、各配列項目の 4 番目のインデックスで並べ替えます。

uasort($arr, function($a, $b) {
    return strtotime($a[3]) - strtotime($b[3]);
});
于 2013-03-29T14:46:07.433 に答える
2

usort()カスタム関数を使用して配列をソートするphp関数を使用する必要があります。一目でそれを行う方法は次のとおりです。

配列を初期化します。

 $arr[0][0] = 'Some Info 1.1';
 $arr[0][1] = 'Some Info 1.2';
 $arr[0][2] = 'Some Info 1.3';
 $arr[0][3] = '05-08-2010';
 $arr[0][4] = 'Some Info 1.4';

 $arr[1][0] = 'Some Info 2.1';
 $arr[1][1] = 'Some Info 2.2';
 $arr[1][2] = 'Some Info 2.3';
 $arr[1][3] = '01-08-2011';
 $arr[1][4] = 'Some Info 2.4';

2 つの日付を比較する比較関数を宣言します。

function cmp($a,$b){
 $d1 = date_parse($a[3]);
 $d2 = date_parse($b[3]);
 return  ($d1 < $d2) ? 1 : -1;
}

最後にusort()、比較関数を使用して呼び出します。

usort($arr,"cmp");

上記の比較関数は、日付が常に3 番目のインデックスにあると想定していることに注意してください。より柔軟性が必要な場合は、比較関数をカスタマイズして、実際の比較の前に日付インデックスを見つけます。幸運を!


より詳しい情報:

于 2013-03-29T14:45:00.690 に答える