[英]Flattening array
我有一个函数将数组更改为html列表(ol / ul)。 数组的深度作为参数传递。
我只想在一个函数中执行此操作。
for($i = 0; $i < $depth; $i++) {
foreach($list_array as $li) {
if(! is_array($li))
{
$str .= '<li>' . $li . '</li>';
}
}
}
这段代码给了我数组的第一个维度。 每当$i
递增时,我想要平整这个数组。
你有什么建议可能有帮助吗?
是的,我知道array_walk_recursive()
,对象迭代器等...我想知道是否有一种简单的方法来执行此任务而不使用任何其他的。 我无法想出任何东西。
不,这不是任何我不允许使用迭代器等的大学项目。
编辑:
print_list(array(
'some first element',
'some second element',
array(
'nested element',
'another nested element',
array(
'something else'
)
)
));
应输出如下内容:
<ul>
<li>some first element</li>
<li>some second element</li>
<ul>
<li>nested element</li>
<li>another nested element</li> // etc
使用递归可能最容易实现:
function print_list($array){
echo '<ul>';
// examine every value in the array
// (including values that may also be arrays)
for($array as $val){
if(is_array($val){
// when we discover the value is, in fact, an array
// print it as if it were the top-level array using
// this function
print_list($val);
}else{
// if this is a regular value, print it as a list item
echo '<li>'.$val.'</li>';
}
}
echo '</ul>';
}
如果你想做缩进,你可以定义一个深度跟踪参数和一个协同例程( print_list_internal($array, $depth)
)或者只是添加一个默认参数( print_list($array,$depth=0)
)然后打印取决于$depth
,任何东西前面都有许多空格。
function print_list($array) {
echo '<ul>';
// First print all top-level elements
foreach ($array as $val) {
if (!is_array($val)) {
echo '<li>'.$val.'</li>';
}
}
// Then recurse into all the sub-arrays
foreach ($array as $val) {
if (is_array($val)) {
print_list($val);
}
}
echo '</ul>';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.