2014-03-12 71 views
0

我想按日期使用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,並且我試圖從這裏的問題開始遵循的所有說明似乎都不起作用。

+0

你能後的代碼的較大塊?另外,你知道哪一行產生錯誤嗎? – larsAnders

回答

1

我相信這個問題是在你的foreach語句。取而代之的是:

foreach($dayEvents as $outputData) { 

你需要這樣的:

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

對於第一條語句,數據是不確定的,因爲你有一個陣列稱爲「輸出」在一個單一的元素。第二,應該定義'數據'。

你可能還需要添加到您的通話uasort:

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

我確定我已經嘗試過這個,但這次它工作!謝謝! :) – dpDesignz

1

PHP中的數組排序函數僅適用於1維數組。以二維數組進行排序,你可以用我的下面的函數,我總是使用這些類型的任務:

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