首页 > 解决方案 > 将嵌套数组打印为列表

问题描述

尝试将嵌套数组打印为列表:

$result = $connection->query($query);
$data = array();
while ($row = $result->fetch_object()) {
    $data[$row->global_id] = $row;
}

$roots = array();
foreach ($data as $row) {   
    if ($row->parent_global_id === null) {
        $roots[]= $row;
    } else {
        $data[$row->parent_global_id]->children[] = $row;
    }
    unset($row->parent_global_id);
    unset($row->global_id);
}

function array2ul($array) {
    $out = "<ul>";
    foreach($array as $key => $elem){
        if(!is_array($elem)){
                $out .= "<li><span>$key:[$elem]</span></li>";
        }
        else $out .= "<li><span>$key</span>".array2ul($elem)."</li>";
    }
    $out .= "</ul>";
    return $out; 
}

array2ul($roots)

产生错误

可捕获的致命错误:stdClass 类的对象无法在线转换为字符串

$out .= "<li><span>$key:[$elem]</span></li>";

所以它是一个对象,但我应该怎么做才能解决这个问题?

数组就像:

Array
(
    [0] => stdClass Object
        (
            [name] => MD
            [children] => Array
                (
                    [0] => stdClass Object
                        (
                            [name] => Year 1
                            [children] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [name] => Integrated Medical Sciences 1
                                        )

                                    [1] => stdClass Object
                                        (
                                            [name] => Integrated Medical Sciences 2
                                        )
                                )
                        )

                    [1] => stdClass Object
                        (
                            [name] => Year 2
                            [children] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [name] => Integrated Medical Practice 1
                                            [children] => Array
                                                (
                                                    [0] => stdClass Object
                                                        (
                                                            [name] => Centralised Teaching
                                                            [children] => Array
                                                                (
                                                                    [0] => stdClass Object
                                                                        (
                                                                            [name] => Seminar - General Medicine Student Led Presentations
                                                                        )

                                                                    [1] => stdClass Object
                                                                        (
                                                                            [name] => Surgery - CBL
                                                                        )
                                                                )
                                                        )

更新

尝试了以下方法:

function walk($array){  
    foreach ($array as $key => $value) {
        echo "<ul>";
        if(!is_array($value->name)){
            echo "<li>$key:[$value->name]</li>";

            walk($value);
        }
        echo "</ul>";
    }
}

walk($roots)

产生:

0:[MD]

    Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 65 Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 66
    name:[]
    Warning: Invalid argument supplied for foreach() in /var/www/html/md/json/generate_json_by_year_print.php on line 63 

    Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 65 Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 66
    children:[]
        0:[Year 1]
            Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 65 Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 66
            name:[]
            Warning: Invalid argument supplied for foreach() in /var/www/html/md/json/generate_json_by_year_print.php on line 63 
            Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 65 Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 66
            children:[]
                0:[Integrated Medical Sciences 1]
                    Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 65 Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 66
                    name:[]
                    Warning: Invalid argument supplied for foreach() in /var/www/html/md/json/generate_json_by_year_print.php on line 63 
                1:[Integrated Medical Sciences 2]
                    Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 65 Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 66
                    name:[]
                    Warning: Invalid argument supplied for foreach() in /var/www/html/md/json/generate_json_by_year_print.php on line 63 
        1:[Year 2]
            Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 65 Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 66
            name:[]
            Warning: Invalid argument supplied for foreach() in /var/www/html/md/json/generate_json_by_year_print.php on line 63 
            Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 65 Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 66
            children:[]
                0:[Integrated Medical Practice 1]
                    Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 65 Notice: Trying to get property of non-object in /var/www/html/md/json/generate_json_by_year_print.php on line 66
                    name:[]

第 66 行是echo "<li>$key:[$value->name]</li>";

标签: phparrays

解决方案


数组的元素是对象,您需要打印name属性。

                $out .= "<li><span>$key:[$elem->name]</span></li>";

推荐阅读