мне нужно перебирать массив, который выглядит следующим образом:array_map с доступом к ключам
$myArray = array(
'key1' => array('subkey' => 'subvalue'),
'key2' => array('subkey' => 'subvalue'),
)
В каждой вложенной ассоциативного массива, я хочу добавить пару ключ-значение на основе внешнего ключа, как это :
$myNewArray = array(
'key1' => array('subkey' => 'subvalue', 'newkey' => 'only for key1'),
'key2' => array('subkey' => 'subvalue'),
)
в идеале, я ищу что-то вроде:
$myNewArray = array_map(function($key, $value) {
if ($key == 'key1') {
$value['newkey'] = 'only for key1';
}
return $value;
}, $myArray);
Однако, это, очевидно, не работает, как callback
не заданы два параметра, а только один. Я мог бы сделать что-то вроде этого:
$myNewArray = array_map(function($key, $value) {
if ($key == 'key1') {
$value['newkey'] = 'only for key1';
}
return WHAT??
}, array_keys($myArray), $myArray);
Однако, что мне вернуть? Кажется, что всегда создается новый массив, то есть отбрасывает мои строковые ключи (key1
и key2
), в то время как один массив array_map()
сохраняет их.
Я могу использовать array_walk()
, но у него есть довольно странный API (перевернутый порядок параметров, массив, переданный по ссылке и т. Д.), Поэтому я бы предпочел, если это можно было бы достичь, используя array_map()
. Может это?
Да, преобразование намного сложнее, я просто дал минимальный пример, который показывает вызов.Спасибо за ваш ответ, первый метод на самом деле не выглядит слишком уродливым для меня, хотя метод array_walk(), безусловно, будет короче. Мне просто не нравится передавать массивы по ссылке. – Borek