Добавить элементы в существующий массив

1

У меня есть массив, который выглядит так

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"
          }
        }

В идеале это также должно исключать новые даты, если в массиве уже имеется одинаковая дата.

  • 0
    Это, наверное, ужасная идея. Ищите существующие методы дат и / или библиотеки. Работа с датами общеизвестно сложна: infiniteundo.com/post/25326999628/…
Теги:
arrays

1 ответ

1
Лучший ответ

Создайте массив с новыми элементами и объедините его со старым массивом

$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);
  • 0
    большое спасибо. Это работает точно так, как мне нужно, но возвращает «день» как int. Как я могу преобразовать это в строку?
  • 0
    У php нет различий между числовой и числовой строками.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню