【问题标题】:Outputting array contents as nested list in PHP在PHP中将数组内容输出为嵌套列表
【发布时间】:2011-06-06 13:42:34
【问题描述】:

我有数组array ( [0] => array(1,2,3,4,5) [1] => array(6,7,8,9,10)),我想这样显示它:

<ul>
  <li>
     <a href=""/>FIRST ELEMENT OF THE array ==> 1</a>
     <a href=""/>2ND ELEMENT OF THE TAB ==> 2</a>
     <a href=""/>3THIRD ELEMENT==> 3</a>
     <a href=""/>FORTH ELEMENT OF THE TAB ==> 4</a>
     <a href=""/>FIFTH ELEMENT==> 5</a>
 </li>
 <li>
     <a href=""/>6th ELEMENT==> 6</a>
     <a href=""/>7th ELEMENT OF THE TAB ==> 7</a>
     <a href=""/>8th ELEMENT==> 8</a>
     <a href=""/>9th ELEMENT OF THE TAB ==> 9</a>
     <a href=""/>10th ELEMENT OF THE TAB ==> 9</a>
 </li>


</ul>

如何在 PHP 中实现这一点?我正在考虑使用array_slice 创建一个子数组。

【问题讨论】:

  • 可以粘贴数组的php代码吗?
  • 不正确&lt;a href=""/&gt;。应该是&lt;a href=""&gt;
  • 您的要求完全改变了...如果您不打算向我们提供所有事实,就不应该浪费我们的时间来解决问题。花时间在第一次正确解释事情。

标签: php html arrays


【解决方案1】:

已更新以考虑您的实际数组结构

您的解决方案是一个简单的嵌套 foreach。

$tab = array(array(1,2,3,4,5), array(6,7,8,9,10));
echo '<ul>';
foreach ($tab as $chunks) {
    echo '<li>';
    foreach($chunks as $chunk) {
        echo '<a href="">' . $chunk . '</a>';
    }
    echo '</li>';
}
echo '</ul>';

【讨论】:

  • 在 OP 更改要求后删除了数组块。
【解决方案2】:

试试

echo "<ul>";
$i=0;
$theCount = count($tab);
while($i<$theCount){
    echo "<li>";
    echo "  <a href=""/>FIRST ELEMENT OF THE TAB ==> {$tab[$i]}</a>";
    $i++;
    echo "  <a href=""/>FIRST ELEMENT OF THE TAB ==> {$tab[$i]}</a>";
    echo "</li>";
    $i++;
}
echo "</ul>";

【讨论】:

  • 注意@nikc 放在下面确实适用:这仅对偶数项有效。简单 - 如果丑陋 - 修复将是转到 count()-1,然后检查是否需要再打印 1。
  • 这会在每次迭代时重新计算数组。您应该隔离计数。
  • 作为学术加速,是的,但我几乎不认为这个问题会要求这样的优化。不过,我会修复“错误”:)
  • 点了点,点了点,但有人可能会争辩说,这是为了让 .... owkee 理解的流程更加清晰,没关系;)
  • +1 代码现在是 MoarBetter。但是,您可能会遇到源数组中元素数量不均匀的问题。
【解决方案3】:

这是另一种方法(演示here):

<?php
$tab = array(1,2,3,4,5,6,7,8,9,10);

//how many <a> elements per <li>
$aElements = 2;    

$totalElems = count($tab);    

//open the list
echo "<ul><li>";

for($i=0;$i<$totalElems;$i++){

    if($i != 0 && ($i%$aElements) == 0){ //check if I'm in the nTh element.
        echo "</li><li>"; //if so, close curr <li> and open another <li> element
    }

    //print <a> elem inside the <li>
    echo "<a href =''>".$tab[$i]."</a>";
}

//close the list
echo "</li></ul>";

?>

提示说明:当$i为第n个元素(除法余数为0)时,$i%n(mod)等于0

已编辑:提出了一个通用解决方案

【讨论】:

  • 我认为你应该把这个条件翻转过来,把包含关闭/打开li元素的块放在第一位。它看起来更容易阅读。
【解决方案4】:
<?php
for($i = 0 ; $i < count($tab) ; $i += 2) {
    echo "<a href>" . $tab[$i] . "</a>";
    echo "<a href>" . $tab[$i+1] . "</a>";
}
?>

这样。

【讨论】:

  • 只要数组中的项目数量始终是偶数,这将起作用。奇数会导致索引溢出。
  • 这会在每次迭代时重新计算数组。缓存该值会更好。
【解决方案5】:

试试这个:

$sections = array_chunk(array(1,2,3,4,5,6,7,8,9,10), 2);

echo '<ul>';

foreach($sections as $value)
{
 echo '<li>';
 echo '<a href=""/>'.$value[0].' ELEMENT OF THE TAB ==>  '.$value[0].'</a>';
 echo '<a href=""/>'.$value[1].' ELEMENT OF THE TAB ==>  '.$value[1].'</a>';
 echo '</li>';
}

echo '</ul>';

【讨论】:

  • array_chunk 肯定是要走的路,但是源数组中元素个数奇数会抛出错误。
  • @Stephen,你是对的,但是稍微检查一下 if($value[0]), if($value[1]) 可以解决这个问题,但我再次同意这不是最好的这样做的方法,我自己现在有几种方法正在考虑,但当时我回答这就是我想到的......
猜你喜欢
  • 1970-01-01
  • 2016-09-28
  • 2015-12-20
  • 2014-03-21
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多