Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP通过3个值对多维数组进行排序_Php_Sorting_Multidimensional Array_Cmp - Fatal编程技术网

PHP通过3个值对多维数组进行排序

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 (

我想按值位置(只能是1或0)、日期和时间对多维数组进行排序。position=1的数组应位于第一位,并应按日期和时间排序。位置为0的数组应位于位置为1的数组之后,并且还应按日期和时间排序

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