php - 将嵌套数组打印为列表
问题描述
尝试将嵌套数组打印为列表:
$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>";
解决方案
数组的元素是对象,您需要打印name
属性。
$out .= "<li><span>$key:[$elem->name]</span></li>";
推荐阅读
- ruby-on-rails - Rails:按孙子的属性排序父母
- powershell - 使用 Powershell 在每个子目录中查找最旧的文件
- javascript - 如何获取连接的mxgraph之间的父子关系
- python - Django 文件断言
- dart - 如何在 Dart 中进行嵌套的 httpClient 调用、多个异步/等待
- microsoft-graph-api - 如何使用 Office 365 Graph API 使用别名电子邮件地址发送邮件
- python - 如何将 fastai 图像从 open_image() 格式转换为 opencv?
- sql - 使用任何最新的 N 个标签获取所有行
- sql - 在 Teradata 中连接表时出现语法错误
- react-native - 使用 ListView reactNative 搜索过滤器