源数组:
$arr = array(
array( 'a' => 'a1', 'child' => array()),
array( 'a' => 'b1', 'child' => array(
array( 'a' => 'b2', 'child' => array()),
array( 'a' => 'b3', 'child' => array())
)),
array( 'a' => 'c1', 'child' => array(
array( 'a' => 'c2', 'child' => array(
array( 'a' => 'c3', 'child' => array(
array( 'a' => 'c4', 'child' => array()),
array( 'a' => 'c5', 'child' => array())
)),
array( 'a' => 'c6', 'child' => array()),
)),
array( 'a' => 'c7', 'child' => array())
)),
array( 'a' => 'd1', 'child' => array(
array( 'a' => 'd2', 'child' => array()),
array( 'a' => 'd3', 'child' => array())
)),
array( 'a' => 'e1', 'child' => array(
array( 'a' => 'e2', 'child' => array()),
array( 'a' => 'e3', 'child' => array())
))
);
子元素的嵌套(嵌套深度)理论上可以是无限的(实际上最多50-60个)。您需要获取以下形式的数组:
$result = array(
array('a1'),
array('b1', 'b2'),
array('b1', 'b3'),
array('c1', 'c2', 'c3', 'c4'),
array('c1', 'c2', 'c3', 'c5'),
array('c1', 'c2', 'c6'),
array('c1', 'c7'),
array('d1', 'd2'),
array('d1', 'd3'),
array('e1', 'e2'),
array('e1', 'e3')
);
那些。所有父元素都必须可追溯到结果数组中的最后一个子元素。
想出了这样的东西,但仍然不一样:
function make_table($arr, $level) {
$level++;
$child_out = null;
$i = 0;
foreach ($arr as $arr_tmp) {
$i++;
$out_tmp[$i][] = $arr_tmp['a'];
if (count($arr_tmp['child']) > 0) {
$child_out = make_table($arr_tmp['child'], $level);
}
if ($child_out != null) {
if ($level == 1) {
$out_tmp[$i] = array_merge($out_tmp[$i], $child_out);
}
else
{
$out_tmp = array_merge($out_tmp, $child_out);
}
}
$child_out = null;
}
return $out_tmp;
}
echo "<pre>";
print_r(make_table($arr, 0));
echo "</pre>";
我已经把我的整个脑袋都弄坏了……有人有什么想法吗?
我问自己,我回答自己:
输出: