Это потому что вы перебираете все $output['fields']
.
Никогда не будет $value
с ключом 'main_topic'
, потому что ключ 'main_topic'
содержится в массиве $output['fields']
и, таким образом, существует только как $key
в вашем foreach. Массив, который вы хотите, это $value
Ваш код должен быть таким:
foreach($output['fields'] as $key => $value) {
if($key == 'title') {
echo $value;
continue;
}
if($key == 'main_topic' && is_array($value)) {
foreach($value as $main_topic) {
echo $main_topic['topic_title'];
}
}
}
Чтобы завершить этот ответ полным решением (включая названия активов), ниже я бы написал его.
Поскольку $output['fields']
является отправной точкой и для того, чтобы сделать код более читабельным, я создаю ссылку на начальный узел с помощью оператора =&
, чтобы массив не копировался в память. Я делаю то же самое с внутренними foreach
с. Поскольку мы не изменяем данные, ссылки на переменные достаточны и занимают меньше памяти и ЦП:
if (is_array($output['fields'])) {
$node =& $output['fields'];
echo $node['title'];
if(is_array($node['main_topic'])) {
foreach($node['main_topic'] as &$main) {
echo $main['topic_title'];
if(is_array($main['subfield'])) {
foreach($main['subfield'] as &$asset) {
echo $asset['asset_title'];
}
}
}
}
}
else {
echo "no menu";
}