Вы можете сделать это, объединив оба массива и отсортировав результат с помощью пользовательской функции сортировки.
Скажем, $rows1
представляет строки $stmt1
, а $rows2
представляет строки $stmt2
. Полученный массив будет:
$rows = array_merge($rows1, $rows2);
Теперь вы можете отсортировать полученный массив с помощью usort
function :
usort($rows, function (array $r1, array $r2) { ... });
где function (array $r1, array $r2)
- функция сравнения.
Если вы используете PHP7, функция сравнения может быть такой:
function (array $r1, array $r2) {
$format = 'Y-m-d H:i:s';
$t1 = DateTimeImmutable::createFromFormat($format, $r1['date']);
$t2 = DateTimeImmutable::createFromFormat($format, $r2['date']);
return $t1 <=> $t2;
}
Как видите, для сравнения объектов встроенного DateTimeImmutable
класса .
удобно использовать
оператор космического корабля .
Для PHP 5 это будет немного дольше:
function (array $r1, array $r2) {
$format = 'Y-m-d H:i:s';
$t1 = DateTime::createFromFormat($format, $r1['date']);
$t2 = DateTime::createFromFormat($format, $r2['date']);
if ($t1 == $t2) {
return 0;
}
return ($t1 > $t2) ? -1 : 1;
}
Весь пример для PHP7:
// rows fetched from $stmt1
$rows1 = [
['id' => 1001, 'date' => '2018-04-26 08:00:00'],
['id' => 1002, 'date' => '2018-04-28 20:11:23'],
['id' => 1003, 'date' => '2018-04-28 20:31:23'],
];
// rows fetched from $stmt2
$rows2 = [
['id' => 2001, 'date' => '2018-04-27 08:00:00'],
['id' => 2002, 'date' => '2018-04-28 20:21:23'],
];
// the resulting array
$rows = array_merge($rows1, $rows2);
// sort the resulting array with our custom sort function
usort($rows, function (array $r1, array $r2) {
$format = 'Y-m-d H:i:s';
$t1 = DateTimeImmutable::createFromFormat($format, $r1['date']);
$t2 = DateTimeImmutable::createFromFormat($format, $r2['date']);
return $t1 <=> $t2;
});
И вывод будет отсортирован массив, как мы ожидаем:
Array
(
[0] => Array
(
[id] => 1001
[date] => 2018-04-26 08:00:00
)
[1] => Array
(
[id] => 2001
[date] => 2018-04-27 08:00:00
)
[2] => Array
(
[id] => 1002
[date] => 2018-04-28 20:11:23
)
[3] => Array
(
[id] => 2002
[date] => 2018-04-28 20:21:23
)
[4] => Array
(
[id] => 1003
[date] => 2018-04-28 20:31:23
)
)