У меня есть многомерный массив, который может содержать или не содержать ключ name
один или несколько раз. То, что я хотел бы сделать, это для каждого экземпляра упомянутого элемента вставить другой элемент рядом с этим элементом с ключом key
.Рекурсивно вставить элемент рядом с другим элементом в массиве
Таким образом, учитывая этот массив:
[
[
'noname' => 'No name',
'label' => 'I have no name'
],
[
'name' => 'foo',
'label' => 'Foo',
'fields' => [
[
'name' => 'bar',
'label' => 'Bar'
]
]
],
[
'name' => 'baz',
'label' => 'Baz'
]
]
я хотел бы следующий вывод:
[
[
'noname' => 'No name',
'label' => 'I have no name'
],
[
'name' => 'foo',
'key' => 'foo-key', # This is inserted by the function
'label' => 'Foo',
'fields' => [
[
'name' => 'bar',
'key' => 'bar-key', # This is inserted by the function
'label' => 'Bar'
]
]
],
[
'name' => 'baz',
'key' => 'baz-key', # This is inserted by the function
'label' => 'Baz'
]
]
Я смотрел в array_walk_recursive
, но не может заставить его работать. Нужно ли мне писать собственную рекурсивную функцию или есть что-то подходящее, что я могу использовать для этого?
Доля код, который вы написали, используя array_walk_recursive и что не работает. – alzee
Tbh Я сразу же упал, потому что я не мог получить доступ к исходному массиву из моего обратного вызова 'array_walk_recursive' ... Я почти уверен, что могу написать пользовательскую функцию для этого, но все еще надеялся на некоторые предложения по построению в функциях или других идеях, которые я, возможно, забыл. – powerbuoy
array_walk_recursive дает вам элементы, которые не являются массивами, если он встречает какой-либо элемент массива, он продолжает рыть. Вероятно, поэтому это не сработало для вас. В любом случае, если вы используете ключевое слово 'use' для отправки вашего массива в область закрытия, вы можете получить к нему доступ (по-прежнему не поможет вам в этом случае). –