php - PHP将值推送到嵌套数组
问题描述
我在 php 中创建了以下对象数组
$treeData[] = (object) array(
"name"=> "A",
"children" => [
[
"name"=> "A1",
"children"=> [
[
"name"=> "A1.1",
"children"=> [
[
"name"=> "A1.1.1",
"children"=> [
....
我正在尝试A1.1.1
根据以下条件在子级内部推送新值:
foreach ($treeData as $value) {
if ($value->name == 'A') {
$value->name[][] = (object) array(
"name"=> "ChildA",
"children"=> ""
);
break;
}
}
但这给了我一个错误
预期结果应与以下示例匹配:
$treeData[] = (object) array(
"name"=> "A",
"children" => [
[
"name"=> "A1",
"children"=> [ [
"name"=> "A1.1",
"children"=> [ [
"name"=> "A1.1.1",
"children"=> [
[
"name"=> "ChildA",
"children"=> [ [
"name"=> "ChildA1"
] ]
],
[
"name"=> "ChildA",
"children"=> [ [
"name"=> "ChildA2"
] ]
],
]
] ]
] ]
]
]);
我在这里做错了什么或以不同方式实现这一目标的任何方式
我得到的错误:
“致命错误:未捕获的错误:字符串不支持 [] 运算符”
解决方案
首先,您会遇到错误:$value->name[][]
. 请注意,名称是一个字符串,因此您不能[]
在其上使用(数组附加运算符)。
如果我是你,我会采用递归方法。考虑以下伪代码:
function addChild($root, $addToName, $nameToAdd) {
if ($root->name == $addToName)
$root->children[] = (object) array("name"=> $nameToAdd, "children"=> []);
else
foreach($root->children as $child)
addChild($child, $addToName, $nameToAdd);
}
现在电话是:addChild($treeData, 'A', "ChildA")
推荐阅读
- java - findViewByID 中的变量 - Android Studio - Java
- cmake - 为什么 CMake find_package 忽略链接器标志?
- dicom - 如何从所需的 DICOM 标签中得出每次旋转的切片数?
- python - 全局关键字未反映
- reactjs - 从另一个反应组件调用反应组件内的方法
- axapta - 在 AX 2012 x++ 中创建常规日记帐时刷新固定资产的价值模型
- html - Bootstrap 4 间距
- python - 为什么我在绘制饼图时遇到问题?
- python - Python:如何将函数结果输出到数据框
- c - dev c++和在线编译器有什么区别?