使用usort按日期对多维数组进行排序

时间:2014-03-12 21:37:54

标签: php arrays sorting usort

我尝试使用usort()按日期对多维数组进行排序,但我似乎无法让它发挥作用。

启动数组:

$dayEvents = array();
$dayEvents['output'] = array();

它的分配方式如下:

$dayEvents['output'][] = array('date' => $dateStamp, 'data' => $dataOutput, 'ad' => $allDay);

示例输出:

array(1) {
["output"]=>
  array(6) {
    [0]=>
    array(3) {
      ["date"]=>
      string(19) "2014-03-12 00:00:00"
      ["data"]=>
      string(115) "
2 tests were booked
"
      ["ad"]=>
      int(1)
    }
    [1]=>
    array(3) {
      ["date"]=>
      string(19) "2014-03-12 08:30:00"
      ["data"]=>
      string(316) "
08:30am
Matamata Class 1 R & F
"
      ["ad"]=>
      int(0)
}
    [2]=>
    array(3) {
      ["date"]=>
      string(19) "2014-03-12 08:00:00"
      ["data"]=>
      string(319) "
08:00am-04:00pm
Truck Course
"
      ["ad"]=>
      int(0)
    }
    [3]=>
    array(3) {
      ["date"]=>
      string(19) "2014-03-12 08:00:00"
      ["data"]=>
      string(328) "
08:00am-03:30pm
Trade Ed Rot Class 2
"
      ["ad"]=>
      int(0)
    }
    [4]=>
    array(3) {
      ["date"]=>
      string(19) "2014-03-12 08:00:00"
      ["data"]=>
      string(326) "
08:00am-03:30pm
Trade Ed Tga Class 2
"
      ["ad"]=>
      int(0)
    }
    [5]=>
    array(3) {
      ["date"]=>
      string(19) "2014-03-12 17:00:00"
      ["data"]=>
      string(330) "
05:00pm-08:00pm
Tauranga Truck Course
"
      ["ad"]=>
      int(0)
    }
}
}

对其进行排序的声明:

if(count($dayEvents['output'])>1) {
    uasort($dayEvents, 'date_compare');
}

功能本身:

function date_compare($a, $b) {
    return strtotime($a['date']) > strtotime($b['date']);
}

最后输出数据

foreach($dayEvents as $outputData) {
    $calendar .= $outputData['data'];
}

但它并没有按日期排序,我收到错误Notice: Undefined index: data

任何人都可以看到我出错的地方吗?我以前从未使用过usort,而且我试图通过此处的问题提供的所有说明似乎都不起作用。

2 个答案:

答案 0 :(得分:1)

PHP中的数组排序函数仅适用于一维数组。要对2D数组进行排序,您可以使用我以下常用于此类任务的以下函数:

function array_sort_by_column(&$array, $column, $direction = SORT_ASC) {
    $reference_array = array();

    foreach($array as $key => $row) {
        $reference_array[$key] = $row[$column];
    }

    array_multisort($reference_array, $direction, $array);
}

调整了您的代码:

array_sort_by_column($dayEvents['output'], 'date');

答案 1 :(得分:1)

我认为问题出在你的foreach声明中。而不是:

foreach($dayEvents as $outputData) {

你需要这个:

foreach($dayEvents['output'] as $outputData) {

对于第一个语句,数据未定义,因为该数组中有一个名为“output”的元素。在第二个中,应该定义“数据”。

您可能还需要将其添加到您的uasort调用中:

uasort($dayEvents['output'], 'date_compare');