2014-09-20 5 views
1

У меня есть таблица столбцов с несколькими столбцами, сгенерированная PHP с помощью Array, которая берет данные из таблицы в базе данных, которая содержит список записей. Один из 5 столбцов - это дата. Я хотел бы таблицу HTML, которая будет сортироваться по timestamp, без какого-либо кода он сортирует его по ID (column0).Сортировка таблицы массивов PHP по дате

Вот код, я должен сортировать:

$table .= "<tr><td>" . $column0[$i][0] ."</td><td>" . $column1[$i][1] . "</td><td>" . $column2[$i][2] . "</td><td>" . $column3[$i][3] . "</td><td>" . $column4[$i][4] . "</td><td>" . $column5[$i][5] . "</td></tr>"; 

$column5[$i][5] является один, содержащий штамп времени. Я пробовал sort(), asort(), array_multisort() ... без везения.

Вот структура SQL таблицы:

column0: id 
column1: number1 
column2: text1 
column3: number2 
column4: text2 
column5: date (format: Y-m-d H:m:s) 

А вот пример его содержания, для которого мне нужно отсортировать по дате колонки:


ид .... .number1 ..... текст1 ..... номер2 ..... текст2 ................ дата

1 ........ 75 ............. Toto .......... 58 ........... Тата ....... 2014-04-07 16:43:51 2 ........ 34 ............. tutu ... ....... 07 ........... titi ......... 2013-04-09 08:27:3 3 ........ 83 ............. tyty .......... 53 ........... tete ....... 2015-04-08 12 : 36: 18


Спасибо!

+1

Разместить свои полные коды! – MH2K9

+1

Если вы получаете данные из базы данных, почему бы вам не заказать ее при ее выборе, а не в php? то есть. 'SELECT ... ORDER BY datestamp' – Sean

+0

Что еще вам нужно? Остальное просто проверяет, не является ли таблица пустой, это единственная часть, касающаяся самой таблицы. После этого есть только 'return $ table; '. – Orphal

ответ

2

Вы можете использовать usort() и сравнить дату на strtotime(). Пример здесь ..

$arr = array(
    0 => array('id'=>1,'number1'=>'75','text1'=>'toto','number2'=>'58','text2'=>'tata','date'=>'2014-04-07 16:43:51',), 
    1 => array('id'=>2,'number1'=>'34','text1'=>'tutu','number2'=>'07','text2'=>'titi','date'=>'2013-04-09 08:27:34',), 
    2 => array('id'=>3,'number1'=>'83','text1'=>'tyty','number2'=>'53','text2'=>'tete','date'=>'2015-04-08 12:36:18',), 
); 

function sort_by_date($a, $b) { 
    $a = strtotime($a['date']); 
    $b = strtotime($b['date']); 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
} 

usort($arr, 'sort_by_date'); 

$keys = array_keys(current($arr)); 

$html = '<table border="1"><tr>'; 
foreach($keys as $key){ 
    $html .= '<th>'.$key.'</th>'; 
} 
$html .= '</tr>'; 

foreach($arr as $value){ 
    $html .= '<tr>'; 
    foreach($value as $val){ 
     $html .= '<td>'.$val.'</td>'; 
    } 
    $html .= '</tr>'; 
} 
$html .= '</table>'; 
echo $html; 

Выход:

enter image description here

+0

Спасибо за ваш ответ. Моя проблема заключается в том, что данные не выполняются с помощью чего-то типа '0 => array ('id' => 1, 'number1' => '75', 'text1' => 'toto', 'number2' => '58 ',' text2 '=>' tata ',' date '=>' 2014-04-07 16:43:51 ',), 'он берет данные в базе данных, которая время от времени заполняется новыми записями. Массивы не жестко закодированы, как в первых нескольких строках. Итак, как адаптировать то, что вы сделали с тем, что у меня есть (первый пост, первая строка кода)? Я полностью новичок в PHP ... – Orphal

+0

Итак, сегодня друг работал с вашим кодом и реализовал рабочее решение.В основном он просто использовал вашу 'функцию sort_by_date ($ a, $ b) {...}' и 'usort ($ column, 'sort_by_date');' и все. Спасибо за помощь! – Orphal

+0

@Orphal, добро пожаловать! :) – MH2K9

Смежные вопросы