我有一个具有以下结构的数组:
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
无效。
答案 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 索引处。如果您想要更多灵活性,请自定义比较函数以在实际比较之前查找日期索引。祝你好运!