循环显示多维PHP数组没有回显

时间:2015-12-01 19:51:20

标签: php arrays multidimensional-array

我正在尝试构建一个<ul>树来显示多维PHP数组,但我见过的所有示例都涉及回显for / foreach循环中的输出。我希望将递归函数的输出存储在变量中而不立即回显。这可能吗?

我的递归显示代码:

function displayArrayRecursively($tree) {       
    for($i = 0; $i < count($tree); $i++) {
        echo '<ul><li>'.$tree[$i]['name'];
        if(is_array($tree[$i]['children'])){                    
            $this->displayArrayRecursively($tree[$i]['children']);
        }
        echo '</li></ul>';
    }
}

但当然,这是回应输出,这不是我想要的。有任何想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

function displayArrayRecursively($tree) {
$output = '';       
for($i = 0; $i < count($tree); $i++) {
    $output .= '<ul><li>'.$tree[$i]['name'];
    if(is_array($tree[$i]['children'])){                    
        $output .= $this->displayArrayRecursively($tree[$i]['children']);
    }
    $output .= '</li></ul>';
}
return $output;
}

答案 1 :(得分:0)

连接变量然后return。但您可以考虑重命名该功能,因为它不再是“显示”。也许formatArrayRecursively()

function displayArrayRecursively($tree) {  
    $output = '';

    for($i = 0; $i < count($tree); $i++) {
        $output .= '<ul><li>'.$tree[$i]['name'];

        if(is_array($tree[$i]['children'])){                    
            $output .= $this->displayArrayRecursively($tree[$i]['children']);
        }
        $output .= '</li></ul>';
    }
    return $output;
}

然后称之为:

$var = $this->displayArrayRecursively($something);

另外,对于数组,foreach更简单:

foreach($tree as $val) {
    $output .= '<ul><li>'.$val['name'];

    if(is_array($val['children'])){                    
        $output .= $this->displayArrayRecursively($val['children']);
    }
    $output .= '</li></ul>';
}