我的数组:如何风格这个名单,使之看起来像一个金字塔
array (
array(
['name'] => 'test1',
['level'] => 1
},
array(
['name'] => 'test2',
['level'] => 2
},
array(
['name'] => 'test3',
['level'] => 2
},
array(
['name'] => 'test4',
['level'] => 3
},
array(
['name'] => 'test5',
['level'] => 3
},
array(
['name'] => 'test6',
['level'] => 3
},
array(
['name'] => 'test7',
['level'] => 3
},
)
我想要什么:
________
| |
| test1 |
|________|
________ ________
| | | |
| test2 | | test3 |
|________| |________|
________ ________ ________ ________
| | | | | | | |
| test4 | | test5 | | test6 | | test7 |
|________| |________| |________| |________|
,我已经有一个功能,通过水平呈现:
public static function f($rows)
{
$str = '';
$level = 0;
$first_li_mode = true;
foreach ($rows as $row) {
if ($level > $row['level']) {
$str .= '</li></ul>' . "\n";
$str .= '</li><li><a href="#">' . $row['name'] . '</a>' . "\n";
$first_li_mode = true;
} elseif ($row['level'] > $level) {
$str .= '<ul><li><a href="#">' . $row['name'] . '</a>' . "\n";
$first_li_mode = false;
;
} else {
if (!$first_li_mode) {
$str .= '</li>' . "\n";
} else {
$first_li_mode = false;
}
$str .= '<li><a href="#">' . $row['name'] . '</a>' . "\n";
}
$level = $row['level'];
}
while ($level > 0) {
$str .= '</li></ul>' . "\n";
$level--;
}
return $str;
}
它所产生:
<ul>
<li class="level_1">
<a href="#">
test1
</a>
<ul>
<li class="level_2">
<a href="">test2</a>
</li>
<li class="level_3">
<a href="">test3</a>
</li>
</ul>
</li>
</ul>
...等,可以说,每一位家长都在这个名单2名儿童,问题是:如何样式此列表,使它看起来像一个金字塔,使每一个父节点(相对于孩子的)出现在他们中间的顶部,如上图所示?无论深度级别如何,也许我需要在渲染函数中进行一些计算以在每个级别上进行偏移?但是如何实现?
我不知道如何计算孩子的偏移量,你能给我一个关于如何在我的循环中计算它的提示吗?我只需要在这种情况下 – user3274945
我曾尝试一些CSS帮助:保证金左:($行[“级别”] * 20)像素;不过这并没有为我工作,请任何想法?我只是不知道如何正确 – user3274945
你需要计数的项目的数量在每个级别,然后计算从那里偏移样式。最好使用在CSS百分比 –