为了账号安全,请及时绑定邮箱和手机立即绑定

将嵌套数组打印为列表

将嵌套数组打印为列表

PHP
慕莱坞森 2022-01-02 16:31:27
尝试将嵌套数组打印为列表:$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                                        )                                )                        )
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

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

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


查看完整回答
反对 回复 2022-01-02
?
森林海

TA贡献2011条经验 获得超2个赞

$elem大概是一个对象。当你检查类型$elem


    if(!is_array($elem)){

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

    }

    else $out .= "<li><span>$key</span>".array2ul($elem)."</li>";

你也需要检查is_object($elem)。对象的 var_dump 会生成一个包含第一个元素的数组:


[0] => stdClass Object

首先,您必须在类中实现一个 __toString() 方法,以便将这些类的对象自动转换为字符串。 我们在哪里以及为什么在 PHP 中使用 __toString() ?


之后,您可以简单地:


    if (is_array($elem))

        $out .= "<li><span>$key</span>".array2ul($elem)."</li>";

    else

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

因为__toString()类的实现


查看完整回答
反对 回复 2022-01-02
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

我得到了这样的事情:


function walk($array)

{    

    //convert object to key-value array

    if (is_object($array)) {

        $array = (array)$array;

    }


    $pdf_result = "<ul>";

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

        if (is_int($value) || is_string($value)) {

            $pdf_result .=  "<li>" . $value;            

        } elseif (is_array($value) || is_object($value)) {

            $pdf_result .= walk($value);

        }

        $pdf_result .=  "</li>";

    }

    $pdf_result .=  "</ul>";


    // Here we return result array

    return $pdf_result;

}


walk($roots);


// And here we set another-scope variable from function

$pdf_result = walk($roots);


查看完整回答
反对 回复 2022-01-02
  • 3 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信