我有一个topics
数组。其中一些包含parent
或child
主题。我想回应每个主题,即使它还是一个孩子。我遍历主题数组,然后检查主题值是否为数组。如果是,则再次遍历它,并将主题分配给topicName
变量。如果否,则将主题分配给变量而不循环。但是,当我回显topicName
时,它仅回显else语句中的主题,而不会回显所有主题。有人可以向我解释为什么不这样做吗?
<?php
$topics = [
'Opening',
'Aanwezigen',
'Opmerkingen vorige notulen',
'Ingezonden stukken' => [
'Jaarverslag 2019',
'Jaarcijfers 2019',
],
'Jaarrekening 2019' => [
'Voorstel tot vaststelling van de jaarcijfers 2019 (stempunt)',
'Vaststelling dividenduitkering (stempunt)',
'Bespreking reserverings- en dividendbeleid',
],
'Rondvraag',
'Afsluiting',
];
foreach ($topics as $topic) {
if (is_array($topic)) {
for($i = 0; $i < count($topic); $i++) {
$topicName = $topic[$i];
}
} else {
$topicName = $topic;
}
echo $topicName;
}
?>
答案 0 :(得分:2)
当您传入foreach时,您将用最后一个元素覆盖,因此topicName始终是数组的最后一个元素(Jaarcijfers 2019和Bespreking reserverings- enaspybeleid BUT其他但未显示在数组中:'在这种情况下,“ jaarcijfers 2019(stempunt)”,“最差红利交易(stempunt)”,TopicName应该是一个数组。
<?php
$topics = [
'Opening',
'Aanwezigen',
'Opmerkingen vorige notulen',
'Ingezonden stukken' => [
'Jaarverslag 2019',
'Jaarcijfers 2019',
],
'Jaarrekening 2019' => [
'Voorstel tot vaststelling van de jaarcijfers 2019 (stempunt)',
'Vaststelling dividenduitkering (stempunt)',
'Bespreking reserverings- en dividendbeleid',
],
'Rondvraag',
'Afsluiting',
];
$mineTopics = [];
foreach ($topics as $key => $topic) {
if (is_array($topic)) {
// Add key
$mineTopics[] = $key;
for($i = 0; $i < count($topic); $i++) {
$mineTopics[] = $topic[$i];
}
} else {
$mineTopics[] = $topic;
}
}
var_dump($mineTopics);
编辑:
将键捕获到foreach循环中,并将其添加到最终数组中
答案 1 :(得分:1)
使它可以递归地工作到任何深度。
function recursivelyPrintTopicNames($topics){
foreach ($topics as $topic => $child_topic) {
if (is_array($child_topic)) {
echo $topic,PHP_EOL; // print parent topic here itself
recursivelyPrintTopicNames($child_topic);
} else {
echo $child_topic,PHP_EOL;
}
}
}
recursivelyPrintTopicNames($topics);
我们检查当前值是否为数组,如果是,则键为父主题。我们递归调用同一函数以打印更多子主题。
如果当前值不是数组,那么这只是一个没有子代的话题。