【问题标题】:PHP Looping through array recursivePHP循环遍历数组递归
【发布时间】:2014-06-17 08:59:00
【问题描述】:

我想在 PHP 中循环遍历一个数组。循环必须是递归的,因为我现在不知道数组中有多少个数组。用于在 Symfony2 中阅读翻译。

输出格式为:

a.d.e
a.f.g
b.h.i
c.j.k.l.m
c.n.o

带有示例数组:

$array = array(
    'a' => array('d' => 'e', 'f' => 'g'),
    'b' => array('h' => 'i'),
    'c' => array(
        'j' => array(
            'k' => array(
                'l' => 'm')),
        'n' => 'o'));

我尝试了以下方法,但这不是最终解决方案,但递归正在工作:

function displayArrayRecursively($array)
{
    foreach ($array as $key => $value) {

        if (is_array($value)) {
            echo $key . '<br>';
            displayArrayRecursively($value);
        } else {

            echo $key . '<br>' . $value . '<br>';       
        }
    }
}

提前致谢!

【问题讨论】:

  • 听起来你想要一个 trie 数据结构
  • 我已经编辑了我的问题

标签: php symfony recursion foreach translation


【解决方案1】:

我猜你的函数只是输出

a
d
e
...

这样的事情应该可以工作:

displayArrayRecursively($array, null);

function displayArrayRecursively($array, $keysString = '')
{
    if (is_array($array)) {
        foreach ($array as $key => $value) {
            displayArrayRecursively($value, $keysString . $key . '.');
        }
    } else {
        echo $keysString . $array . '<br/> ';
    }
}

它应该非常接近您的需要。

【讨论】:

    【解决方案2】:

    这个函数做你想做的:

    function displayArrayRecursively($array, $tree = array()) {
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                displayArrayRecursively($value, array_merge($tree, array($key)));
            } else {
                print implode('.', array_merge($tree, array($key, $value)));
                print "\n<br />";
            }
        }
    }
    

    输出:

    a.d.e
    a.f.g
    b.h.i
    c.j.k.l.m
    c.n.o
    

    【讨论】:

      【解决方案3】:

      你想要的功能

      function displayArrayRecursively($array, $parent = '')
      {
          foreach ($array as $key => $value) {
      
              if (is_array($value)) {
                  if(count($value) == 1 && !empty($parent))
                      $key = $parent . $key;
                  displayArrayRecursively($value, $key);
              } else {
                  echo $parent;
                  echo $key . $value . '<br>';       
              }
          }
      }
      

      【讨论】: