【问题标题】:Two elements print in one foreach loop than next loop start两个元素在一个 foreach 循环中打印,而不是下一个循环开始
【发布时间】:2012-10-11 07:48:33
【问题描述】:

我有一个数组

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

当我为此使用 foreach 循环时

foreach($foo as $val):  
    print '<li>'.$val.'</li>';  
endforeach 

输出是,

<li> 1 </li>  
<li> 2 </li>  
<li> 3 </li>  
<li> 4 </li>  
<li> 5 </li>

但我想发布类似的东西

<li> 1, 2 </li>  
<li> 3, 4 </li>  
<li> 5, 6 </li>  
<li> 7, 8 </li>  

有可能吗?

【问题讨论】:

标签: php


【解决方案1】:

这可能是您需要的:

foreach($foo as $key=>$val) {
    if ($val&1) {
        echo '<li>' . $val;
        if($key == (count($foo)-1)){
            echo '</li>';
        }
    } else {
        echo ',' . $val . '</li>';
    }
}

【讨论】:

  • 即使这段代码有效,它仍然需要改进。它只能在具有偶数个元素的数组上正常工作。如果计数为奇数,则会导致此 &lt;li&gt;9 - 最后一个 &lt;li&gt;-tag 永远不会关闭。
  • @insertusernamehere 你是对的,我已经更新了答案,但它仍然有些骇人听闻。我认为 james.haggerty 的解决方案是最好的。
【解决方案2】:

请试试这个:

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

$i=1;
$firstElement = "";

foreach($foo as $val):  

    if($i%2==0)
    {
        print '<li>'.$firstElement.','.$val.'</li>';  
    }
    else
    {
        $firstElement = $val;
    }   

    $i++;

endforeach 

【讨论】:

  • 请改进代码。它不会打印任何内容,因为您忘记增加 $i。以print 开头的行中还有一个错误:您使用.(一个点)连接字符串,所以,(一个逗号)在这里不起作用。
  • Foreach 将遍历您的数组,但不会增加 $i
  • -1 已删除。这个有效,但仍然只适用于偶数的数组。
【解决方案3】:

对于 php 你可以这样做:

for($i=0;$i<count($foo);$i+=2) {
    echo "<li>{$foo[$i]}, {$foo[$i+1]}</li>";
}

【讨论】:

  • 虽然这段代码工作正常,但它会抛出一个Notice: Undefined offset,因为你不检查$foo[$i+1]是否存在。最后一行看起来像 &lt;li&gt;9,&lt;/li&gt; 而不是 &lt;li&gt;9&lt;/li&gt; 会更好。
【解决方案4】:
$foo = array(1,2,3,4,5,6,7,8,9);
foreach (array_chunk($foo, 2) as $chunk) {
    echo "<li>" . implode(', ', $chunk) . "</li>\n";
}

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2013-05-17
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多