Конкретный массив слияния с датами в php
У меня есть два массива:
array:5 [▼
0 => "1 Oct 2016"
1 => "2 Oct 2016"
2 => "3 Oct 2016"
3 => "4 Oct 2016"
4 => "5 Oct 2016"
]
а также
array:5 [▼
0 => "29 Sep 2016"
1 => "30 Sep 2016"
2 => "1 Oct 2016"
3 => "2 Oct 2016"
4 => "3 Oct 2016"
]
Мне нужно объединить их в один с сортировкой по дате, чтобы получить что-то вроде этого:
array:7 [▼
0 => "29 Sep 2016"
1 => "30 Sep 2016"
2 => "1 Oct 2016"
3 => "2 Oct 2016"
4 => "3 Oct 2016"
5 => "4 Oct 2016"
6 => "5 Oct 2016"
]
Как я могу это сделать?
2 ответа
Решение
Вы можете сделать это с array_merge
(чтобы получить один массив), array_unique
(для устранения дубликатов) и usort
(чтобы получить их в правильном порядке):
$c = array_unique(array_merge($a, $b));
usort($c, function($a, $b) { return strtotime($a) - strtotime($b); });
Посмотрите, как это работает на eval.in.
<?php
function _sort($a, $b)
{
$a = DateTime::createFromFormat('d M Y', $a);
$b = DateTime::createFromFormat('d M Y', $b);
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
$a = [
0 => "1 Oct 2016",
1 => "2 Oct 2016",
2 => "3 Oct 2016",
3 => "4 Oct 2016",
4 => "5 Oct 2016",
];
$b = [
0 => "29 Sep 2016",
1 => "30 Sep 2016",
2 => "1 Oct 2016",
3 => "2 Oct 2016",
4 => "3 Oct 2016",
];
$merged = array_merge($a, $b);
# sort
usort($merged, '_sort');
print_r($merged);