PHP通过3个值对多维数组进行排序
我想按值位置(只能是1或0)、日期和时间对多维数组进行排序。position=1的数组应位于第一位,并应按日期和时间排序。位置为0的数组应位于位置为1的数组之后,并且还应按日期和时间排序PHP通过3个值对多维数组进行排序,php,sorting,multidimensional-array,cmp,Php,Sorting,Multidimensional Array,Cmp,我想按值位置(只能是1或0)、日期和时间对多维数组进行排序。position=1的数组应位于第一位,并应按日期和时间排序。位置为0的数组应位于位置为1的数组之后,并且还应按日期和时间排序 Array ( [001] => Array ( [position] => 1 [Date] => 28.04.2013 [Time] => 00:21:38 ) [002] => Array (
Array
(
[001] => Array
(
[position] => 1
[Date] => 28.04.2013
[Time] => 00:21:38
)
[002] => Array
(
[position] => 1
[Date] => 28.04.2013
[Time] => 00:27:07
)
[003] => Array
(
[position] => 0
[Date] => 28.04.2013
[Time] => 00:15:06
)
[004] => Array
(
[position] => 0
[Date] => 28.04.2013
[Time] => 00:26:09
)
)
这就是我希望数组在排序后的状态:
Array
(
[002] => Array
(
[position] => 1
[Date] => 28.04.2013
[Time] => 00:27:07
)
[001] => Array
(
[position] => 1
[Date] => 28.04.2013
[Time] => 00:21:38
)
[004] => Array
(
[position] => 0
[Date] => 28.04.2013
[Time] => 00:26:09
)
[003] => Array
(
[position] => 0
[Date] => 28.04.2013
[Time] => 00:15:06
)
)
我尝试了一些功能,但没有一个是正确的。position=1的数组是最后一个数组,或者所有数组都只是按日期和时间排序。我自己想不出来。
提前感谢,如果我的英语不好,请原谅。看看这个函数,它以数组和比较函数作为参数 编写一个Comparison函数,可以比较两个数组元素:
- 比较位置
- 如果职位相等,则比较日期
- 如果日期相等,则比较时间
其中原始数据集位于名为
$array
$positions = $datetimes = array();
foreach($array as $k => $v) {
$positions[$k] = $v['position'];
$datetimes[$k] = strtotime($v['Date']. ' ' .$v['Time']);
}
array_multisort($positions, SORT_DESC, $datetimes, SORT_DESC, $array);
根据比较数据,您似乎希望先按位置DESC排序,然后按时间(也假设日期)DESC排序,所以这就是它的作用
工作示例:在SO中有数百种不同的方法,所有的解决方案都涉及使用
usort
。向我们展示您尝试的内容。位置为1的数组应位于第一位。使用您的方法,排序时将首先获得0。(从文档:如果第一个参数被认为分别小于、等于或大于第二个参数,则比较函数必须返回小于、等于或大于零的整数。)。您应该返回-$pos。日期和时间也是如此,从给出的示例来看,我们需要降序。右。。刚刚编辑!非常感谢。它工作得很好:)+1用于使用array_multisort。乍一看,我根本不明白你在干什么。看完文件,现在已经很清楚了。今天我学到了一些东西
$positions = $datetimes = array();
foreach($array as $k => $v) {
$positions[$k] = $v['position'];
$datetimes[$k] = strtotime($v['Date']. ' ' .$v['Time']);
}
array_multisort($positions, SORT_DESC, $datetimes, SORT_DESC, $array);