PHP通过数组递归循环


PHP Looping through array recursive

我想在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>';       
        }
    }
}

提前感谢!

我猜你的函数只是输出

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/> ';
    }
}

应该很接近你需要的。

这个函数做你想做的:

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

您想要的功能

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>';       
        }
    }
}