Как добавить элемент в подмассив в php - PullRequest
1 голос
/ 23 января 2020

У меня есть массив:

$main_arr = [
  0=>[
         "el 01",
         "el 02",
         "el 03",
     ],
  1=>[
         "el 11",
         "el 12",
         "el 13",
     ],
  2=>[
         "el 21",
         "el 22",
         "el 23",
     ],
];

Есть ли функция или отдельный оператор в php, как ninja_array_method($main_arr, "el new"), который добавляет новый элемент во все вложенные массивы:

$main_arr = [
  0=>[
         "el 01",
         "el 02",
         "el 03",
         "el new",
     ],
  1=>[
         "el 11",
         "el 12",
         "el 13",
         "el new",
     ],
  2=>[
         "el 21",
         "el 22",
         "el 23",
         "el new",
     ],
];

Я просто хочу добавить эти элементы "el new" во все массивы без каких-либо изменений в одной строке или просто как метод add_el ($ main_arr, "el new")

Ответы [ 3 ]

6 голосов
/ 23 января 2020

Использование foreach loop с ссылкой &:

foreach($data as $ind=>&$ar){
     $ar[] = 'el new';
}

Демо

Ссылка & мутирует ваш подмассив.

Если вам нужна функция:

function add_el($data,$elem){
    foreach($data as $ind=>&$ar){
         $ar[] = $elem;
    }
    return $data;
}

Демо

3 голосов
/ 23 января 2020

, если вы знакомы с laravel коллекцией

Вы можете использовать pu sh Метод

$main_arr = [
    0=>[
           "el 01",
           "el 02",
           "el 03",
       ],
    1=>[
           "el 11",
           "el 12",
           "el 13",
       ],
    2=>[
           "el 21",
           "el 22",
           "el 23",
       ],
  ];

  $expectedArray = [
    0=>[
           "el 01",
           "el 02",
           "el 03",
           "el new",
       ],
    1=>[
           "el 11",
           "el 12",
           "el 13",
           "el new",
       ],
    2=>[
           "el 21",
           "el 22",
           "el 23",
           "el new",
       ],
  ];

  $collection = collect($main_arr)
                    ->map(function($eachArray){
                    return collect($eachArray)->push('el new')->toArray();
                })
                ->toArray();

  dd($expectedArray,$collection);
0 голосов
/ 23 января 2020

Если вам нужен однострочник, вот несколько вариантов:

На месте

$value = 'el new';
array_walk($main_arr, function (&$entry) use ($value) { $entry[] = $value; });

Неизменяемый начальный массив

$value = 'el new';
$modified = array_map(function ($entry) use ($value) { return array_merge($entry, [$value]); }, $main_arr);

Неизменяемый с небольшим хитростью array_map

$value = 'el new';
$modified = array_map(function ($entry, $value) { return array_merge($entry, [$value]); }, $main_arr, array_fill(0, count($main_arr), $value));

Небо - это предел

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...