Вам потребуется получить доступ к самому нижнему подрешетке, где находится клавиша name
. Клавиши первого уровня: Call xyz
и Hidden
. Подмассивы второго уровня имеют ключ features
. Третий уровень имеет индексированные ключи. name
- это ассоциативный ключ на четвертом уровне.
После того, как вы доберетесь до четвертого уровня, вы можете кратко написать in_array()
в своем состоянии, чтобы проверить, соответствует ли нижняя строка данных для получения нового элемента checkbox => 1
. (В качестве альтернативы вы могли бы опустить вызов in_array()
и использовать: $set3["name"] == "Display" || $set3["name"] == "Forwarding"
, но это более многословно и уродливее для увеличения.)
Код: ( Демо )
$array = [
"Call xyz" => [
"features" => [
["name" => "Display", "display" => "webxxx", "category" => "x", "uniq_id" => "x"],
["name" => "Forwarding", "display" => "webxxx", "category" => "x", "uniq_id" => "x"]
]
],
"Hidden" => [
"features" => [
["name" => "XYZ", "display" => "webxxx", "category" => "x", "uniq_id" => "x"],
["name" => "ABC", "display" => "webxxx", "category" => "x", "uniq_id" => "x"]
]
]
];
$whitelist = ["Display", "Forwarding"];
foreach ($array as $key1 => $set1) {
foreach ($set1 as $key2 => $set2) {
foreach ($set2 as $key3 => $set3) {
if (in_array($set3["name"], $whitelist)) {
$array[$key1][$key2][$key3]["checkbox"] = 1;
}
}
}
}
var_export($array);
Выход:
array (
'Call xyz' =>
array (
'features' =>
array (
0 =>
array (
'name' => 'Display',
'display' => 'webxxx',
'category' => 'x',
'uniq_id' => 'x',
'checkbox' => 1,
),
1 =>
array (
'name' => 'Forwarding',
'display' => 'webxxx',
'category' => 'x',
'uniq_id' => 'x',
'checkbox' => 1,
),
),
),
'Hidden' =>
array (
'features' =>
array (
0 =>
array (
'name' => 'XYZ',
'display' => 'webxxx',
'category' => 'x',
'uniq_id' => 'x',
),
1 =>
array (
'name' => 'ABC',
'display' => 'webxxx',
'category' => 'x',
'uniq_id' => 'x',
),
),
),
)