我有一个php数组,生成如下:
$array['Top Level']['Level 2: A']['Son of A'] = "item";
$array['Top Level']['Level 2: A']['Daughter of A'] = "item";
$array['Top Level']['Level 2: B'] = "item";
json_encode
给我以下输出:
{
"Top Level":{
"Level 2: A":{
"Son of A":"item",
"Daughter of A":"item"
},
"Level 2: B":"item"
}
}
我需要的输出如下:
{
"name":"Top Level",
"parent":"null",
"children":[
{
"name":"Level 2: A",
"parent":"Top Level",
"children":[
{
"name":"Son of A",
"parent":"Level 2: A"
},
{
"name":"Daughter of A",
"parent":"Level 2: A"
}
]
},
{
"name":"Level 2: B",
"parent":"Top Level"
}
]
}
我怎么能意识到这一点?由于我的数据源,另一种实现方法不适用。
您需要使用已有的键将元素添加到数组中,以便获得以下内容:
$array = array (
"name" => "Top Level",
"parent" => "null",
"children" => array (
"name" => "Level 2: A",
"parent" => "Top Level",
"children" => array (
// ...
)
)
);
据我所知,唯一的方法是更改或重组数组。
json_encode
函数只会将数组结构转换为json字符串。
这里有一个递归技术。。。
迭代每个级别,然后在级别元素包含子数组时递归。如果没有子数组,则写入一个空数组。根据问题要求,立即删除可能为空的子数组。
代码:(演示)
$array['Top Level']['Level 2: A']['Son of A'] = "item";
$array['Top Level']['Level 2: A']['Daughter of A'] = "item";
$array['Top Level']['Level 2: B'] = "item";
function recurse($array, $parent = null) {
$entries = [];
foreach ($array as $key => $value) {
$temp = [
'name' => $key,
'parent' => $parent,
'children' => is_array($value)
? recurse($value, $key)
: []
];
if (!$temp['children']) {
unset($temp['children']);
}
$entries[] = $temp;
}
return $entries;
}
var_export(recurse($array));
输出:
array (
0 =>
array (
'name' => 'Top Level',
'parent' => NULL,
'children' =>
array (
0 =>
array (
'name' => 'Level 2: A',
'parent' => 'Top Level',
'children' =>
array (
0 =>
array (
'name' => 'Son of A',
'parent' => 'Level 2: A',
),
1 =>
array (
'name' => 'Daughter of A',
'parent' => 'Level 2: A',
),
),
),
1 =>
array (
'name' => 'Level 2: B',
'parent' => 'Top Level',
),
),
),
)