从多维数组获取数组值

时间:2019-09-20 07:22:19

标签: php arrays

我有一个topics数组。其中一些包含parentchild主题。我想回应每个主题,即使它还是一个孩子。我遍历主题数组,然后检查主题值是否为数组。如果是,则再次遍历它,并将主题分配给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;    
}
?>

2 个答案:

答案 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);
  • 我们检查当前值是否为数组,如果是,则键为父主题。我们递归调用同一函数以打印更多子主题。

  • 如果当前值不是数组,那么这只是一个没有子代的话题。

演示: https://3v4l.org/WoSJq