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

Sorting on the fourth index of each array item, based on a strtotime() comparison:

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';

声明比较两个日期的比较函数:

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

最后usort()使用您的比较功能调用。

usort($arr,"cmp");

Please note that the mentioned comparison function assumes that the date is always at the 3rd index. If you want more flexibility, customize the comparison function to find the date index before the actual comparison. Good luck!


More info:

于 2013-03-29T14:45:00.690 回答