PHP循环遍历数组递归

时间:2014-06-17 08:59:00

标签: php symfony recursion foreach translation

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

提前致谢!

3 个答案:

答案 0 :(得分:0)

我猜你的功能只是输出

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

它应该非常接近你需要的东西。

答案 1 :(得分:0)

此功能可以满足您的需求:

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

答案 2 :(得分:0)

你想要的功能

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