У меня есть массив, который выглядит так
array(3) {
[0]=>
array(4) {
["sort"]=>
string(0) ""
["day"]=>
string(2) "2"
["month"]=>
string(1) "8"
["year"]=>
string(4) "2015"
}
[1]=>
array(4) {
["sort"]=>
string(0) ""
["day"]=>
string(1) "5"
["month"]=>
string(1) "8"
["year"]=>
string(4) "2015"
}
[2]=>
array(4) {
["sort"]=>
string(0) ""
["day"]=>
string(1) "9"
["month"]=>
string(1) "8"
["year"]=>
string(4) "2015"
}
}
Как видите, он состоит из сортировки, даты, месяца и года. Я хочу добавить новый элемент в тот же массив со значением "день" +1.
Если восьмая августа 2015 года находится в массиве, она также должна включать 9 августа 2015 года. Мне нужен способ извлечения значений, вычисления новой даты и возврата во все даты. Результат должен выглядеть так:
array(3) {
[0]=>
array(4) {
["sort"]=>
string(0) ""
["day"]=>
string(2) "2"
["month"]=>
string(1) "8"
["year"]=>
string(4) "2015"
}
[1]=>
array(4) {
["sort"]=>
string(0) ""
["day"]=>
string(1) "5"
["month"]=>
string(1) "8"
["year"]=>
string(4) "2015"
}
[2]=>
array(4) {
["sort"]=>
string(0) ""
["day"]=>
string(1) "9"
["month"]=>
string(1) "8"
["year"]=>
string(4) "2015"
}
[3]=>
array(4) {
["sort"]=>
string(0) ""
["day"]=>
string(2) "3"
["month"]=>
string(1) "8"
["year"]=>
string(4) "2015"
}
[4]=>
array(4) {
["sort"]=>
string(0) ""
["day"]=>
string(1) "6"
["month"]=>
string(1) "8"
["year"]=>
string(4) "2015"
}
[5]=>
array(4) {
["sort"]=>
string(0) ""
["day"]=>
string(1) "10"
["month"]=>
string(1) "8"
["year"]=>
string(4) "2015"
}
}
В идеале это также должно исключать новые даты, если в массиве уже имеется одинаковая дата.
Создайте массив с новыми элементами и объедините его со старым массивом
$temp = array();
foreach($array as $item)
$temp[] = array_replace($item, array("day" => $item["day"]+1));
$res = array_merge($array, $temp);
Исключить повторяющийся день
$days = array_reduce($array,
function($a, $i) { $a[$i['day']] = 1; return $a; ; },
array());
$temp = array();
foreach($array as $item)
if (! isset($days[$item["day"]+1]))
$temp[] = array_replace($item, array("day" => $item["day"]+1));
$res = array_merge($array, $temp);