按PHP数组的内部行排序

时间:2013-03-29 14:36:20

标签: php sorting

我有一个具有以下结构的数组:

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无效。

2 个答案:

答案 0 :(得分:4)

根据strtotime()比较对每个数组项的第四个索引进行排序:

uasort($arr, function($a, $b) {
    return strtotime($a[3]) - strtotime($b[3]);
});

答案 1 :(得分:2)

您应该使用PHP函数usort(),使用自定义函数对数组进行排序。以下是如何一目了然。

初始化您的数组:

 $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");

请注意,上述比较函数假定日期始终位于 3rd 索引处。如果您想要更多灵活性,请自定义比较函数以在实际比较之前查找日期索引。祝你好运!


更多信息: