-1

我想按值位置(只能是 1 或 0)、日期和时间对多维数组进行排序。position = 1 的数组应该是第一个,并且它们应该按日期和时间排序。position = 0 的数组应该在 position = 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 的数组是最后一个数组,或者所有数组都按日期和时间排序。我自己想不通。如果我的英语不好,请提前致谢。

4

3 回答 3

1

看一下函数usort(),它接受一个数组和一个比较函数作为参数。

编写一个可以比较两个数组元素的比较函数:

  • 比较位置

  • 如果位置相等,则比较日期

  • 如果日期相等,则比较时间

于 2013-04-27T22:04:38.557 回答
1

使用usort() -“使用用户定义的比较函数按值对数组进行排序”

function your_func($a, $b) {
    $pos = $b["position"] - $a["position"];
    if($pos) return $pos;

    $date = strtotime($b["Date"]) - strtotime($a["Date"]);
    if($date) return $date;

    $time = strtotime($b["Time"]) - strtotime($a["Time"]);
    return $time;
}
usort($arr, "your_func");
于 2013-04-27T22:09:15.713 回答
1

$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,这就是它的作用。

工作示例:http ://codepad.org/exc5Dhq8

于 2013-04-27T22:15:26.917 回答