вы можете поместить значения в массив, а затем использовать usort для сортировки по определенной пользователем функции.
И обратите внимание, что элементы преобразуются в строку, когда они установлены в массиве. Сравнивать их как объекты XML они не то, что вы хотите.
Небольшое объяснение:
Сначала я помещаю данные XML в массив только потому, что с этими данными проще работать.
Затем я сортирую массив на основе моей пользовательской функции date_sort
. Глядя на документацию по usort, вы видите:
Функция сравнения должна возвращать целое число меньше, равно или
больше нуля, если первый аргумент считается
соответственно меньше, равно или больше второго.
Итак, поскольку вы хотите отсортировать по дате desc, если даты равны, то порядок сортировки также равен (возврат 0), если дата более поздняя, она должна быть раньше в списке (возврат -1), и если дата больше, она должна быть позже в списке (возврат 1)
Тогда вы просто проходите массивную печать по ходу.
Если вы хотите использовать дополнительные данные, просто поместите их в массив в первом цикле.
$production_array = array();
foreach($productions as $prod) {
$prod_attrs = $prod->attributes();
$prod_date = $prod_attrs->startdate;
$production_array[] = array(
'date'=>(string) $prod_date,
'company'=>(string) $prod_attrs->company,
'review_en'=>(string) $prod->review['quote'],
'review_de'=>(string) $prod->review->translation
);
}
usort($production_array, 'date_sort');
foreach($production_array as $production) {
echo "<tr><td>", $production['date'], "</td><td>", html_encode($production['company']), "</td><td>",$production['review_en'], "</td></tr>";
}
function date_sort($a, $b) {
if($a['date'] == $b['date']) return 0;
return $a['date'] > $b['date'] ? -1 : 1;
}