我花了一段时间尝试从旧的答案中获取所需内容,但还没有完全得到(虽然已经接近了!)。
我有这个:
[January] => Array
(
[Tuesday] => Array
(
[foo] => Array
(
[82] => 47731
[125] => 19894
)
[bar] => Array
(
[82] => 29911
[125] => 10686
)
)
}
...而我想要这个;
[0] => Array
(
'key' => 'January'
'children' => Array
[0] => Array
{
'key' => 'Tuesday'
'children' => Array
[0] => Array
{
'key' => 'foo'
'values' => Array
{
[82] => 47731
[125] => 19894
}
[1] => Array
{
'key' => 'bar'
'values' => Array
{
[82] => 29911
[125] => 10686
}
}
)
}
我通过修改递归更改数组中的键的第一个答案已经接近了,但是我的结果只有底层是正确的——具有“Tuesday”、“foo”和“bar”键的节点看起来与源数组相同。
这是我目前的代码:
public function transform_hierarchical_output(&$var)
{
if (is_array($var))
{
$final = [];
$i = 0;
foreach ($var as $k => &$v)
{
$new_node = [
'key' => $k,
'children' => $v
];
$k = $i;
$this->transform_hierarchical_output($v);
$final[$k] = $new_node;
$i++;
}
$var = $final;
}
elseif (is_string($var))
{
}
}
这需要与任何长度和深度的源数组一起工作。
提前感谢。
Geoff
foo
和bar
的子元素使用values
,而其他的使用children
?这里有任何逻辑吗? - Passerby