Проблема в strtotime
вернет false, если вы передадите ей строку, не относящуюся к дате. "8-06-2001 fish"
не является строкой даты и времени, так как "fi sh" не является датой или временем. Таким образом, все ваши strtotime
вызовы возвращают false, и ваш сортировка не работает.
Чтобы извлечь строку даты из ваших строк, вам нужно разделить строки, чтобы вы только получил вашу строку даты. Символ, который разделяет вашу строку даты, а остальные (т. Е. Символ, который разделяет "8-06-2001"
и "fish"
) - это " "
.
Итак, вам нужно разделить вашу строку на " "
. Для этого используйте explode(" ", $string)
, который возвращает массив. Первый элемент в этом массиве (то есть [0]
) - это строка перед первым " "
.
Вот код, который должен быть:
// DATE SORT FUNCTION
$compare_function = function($a,$b) {
$a_timestamp = strtotime(explode(" ", $a)[0]); // convert string date to a int timestamp
$b_timestamp = strtotime(explode(" ", $b)[0]);
if ($a_timestamp > $b_timestamp) {return -1;}
elseif ($a_timestamp < $b_timestamp) {return 1;} else {return 0;}
};
// USE FUNCTION
usort($newarray, $compare_function)