我想展平一个物体。这是我到目前为止:保持秩序时展平多维物体
{
"1": {
"id": 1,
"name": "parent",
"children": {
"4": {
"id": 4,
"name": "child1",
"parent": 1
},
"5": {
"id": 5,
"name": "child2",
"parent": 1
}
}
},
"2":{
"id": 2,
"name": "parent2"
}
}
这就是我想要完成的。因此,保持相同的顺序,但扁平的对象:
{
"1": {
"id": 1,
"name": "parent",
},
"4": {
"id": 4,
"name": "child1",
"parent": 1
},
"5": {
"id": 5,
"name": "child2",
"parent": 1
},
"2": {
"id": 2,
"name": "parent2"
}
}
到目前为止我还没有找到解决方案。我尝试了一个没有太多成功的功能:
protected function _flattenObject($array)
{
static $flattened = [];
if(is_object($array) && count($array) > 0)
{
foreach ($array as $key => $member) {
if(!is_object($member))
{
$flattened[$key] = $member;
} else
{
$this->_flattenObject($member);
}
}
}
return $flattened;
}
对我来说,困难的部分是保持相同的顺序(孩子低于其父母)。上面提到的函数也删除了所有的对象,并且几乎只保留了它的值,所以它并不是很成功。
希望在这里有人知道这个很好的解决方案。
顺便说一句,我想要这样的扁平结构的原因是因为我必须使用的系统,无法处理多维数组和对象。我仍然希望显示一个层次结构,这可能与我描述的扁平化结构有关,因为对象实际上也包含一个“级别”键,所以我可以给它们一些基于“级别”的填充,同时仍然显示在它们的下面家长。
编辑: JSON似乎不是有效的,所以我修改了一下。
您的原始数据是指对象的数组,还是作为对象的对象是正确的? –
@The One and Only ChemistryBlob确实是一个物体的对象。 –
@Ryan Vincent JSON对象现在应该是有效的 –