【问题标题】:Limiting output within a foreach loop限制 foreach 循环内的输出
【发布时间】:2013-07-24 12:06:34
【问题描述】:

我有一个名为$alternative 的多维数组,其中包含单词。

这个数组是动态生成的,有时可能只有 3 个单词,有时可能有 300 个单词。

在下面的代码中,我将数组中的单词输出到网页。

我如何将输出限制为 10 个单词?

foreach ($alternative as $test)
    {
        foreach ($test as $test2)
        {
        $test3 = ucwords($test2); //Capitalizes first letter of each word
        printf('<li><a href="related.php?query=%1$s" title="%1$s" >%1$s</a></li>', $test3);

        }

    }

目前,在某些情况下,显示的字数过多,我想限制为十个字。

我想不出办法来做到这一点。有人有什么建议吗?

谢谢各位。

【问题讨论】:

  • 这段代码可以输出10-300个&lt;li&gt;集合,还是一个&lt;li&gt;里面有10-300个字?
  • @Marc B... 10-300 &lt;li&gt;
  • 在内循环内部放置一个计数器,例如if ($count++ &gt; 10) { break; }
  • $alternative 数组是如何制作的。当数组大于 10 时,就停止制作数组。

标签: php multidimensional-array foreach conditional-statements


【解决方案1】:

您可以简单地使用一个计数器,并在每次打印一个单词时递增它。这是一个简单的例子:

$max_words = 10;
$nb_words = 0;

foreach ($alternative as $test)
{
    foreach ($test as $test2)
    {
        $test3 = ucwords($test2); //Capitalizes first letter of each word
        printf('<li><a href="related.php?query=%1$s" title="%1$s" >%1$s</a></li>', $test3);
        $nb_words++;

        if($nb_words >= $max_words)
            break;
    }
    if($nb_words >= $max_words)
        break;
}

【讨论】:

  • 谢谢@Y0lk,我还没有机会完全测试这个,另一个答案有效。
【解决方案2】:

你可以把计数器放在里面:

$counter = 0 ;
 foreach ($alternative as $test)
        {
            foreach ($test as $test2)
            {
            $test3 = ucwords($test2); //Capitalizes first letter of each word
            printf('<li><a href="related.php?query=%1$s" title="%1$s" >%1$s</a></li>',       test3);
            if(counter == 9 ) {
            break;
            }else{
               counter++;
            }
            }

        }

【讨论】:

  • 谢谢@Петър Петров,我没有机会完全测试这个,另一个答案有效。
【解决方案3】:

简单。实现一个计数器。下面的实现将为每组替代对象吐出 10 个 &lt;li&gt; 词。

foreach ($alternative as $test)
{
    $count = 0;
    foreach ($test as $test2)
    {
        if ($count >= 10) break;
        $test3 = ucwords($test2); //Capitalizes first letter of each word
        printf('<li><a href="related.php?query=%1$s" title="%1$s" >%1$s</a></li>',$test3);
        $count++;
    }

}

总共只有 10 个 &lt;li&gt; 元素,请查看其他答案!

【讨论】:

  • 在这种情况下,您的计数器将在每个上循环中为 0!
  • 感谢@Kirk Ba​​ckus,我没有机会对此进行全面测试,其他答案有效。
【解决方案4】:
$counter = 0;
foreach ($alternative as $test) {
    foreach ($test as $test2) {
        $test3 = ucwords($test2); //Capitalizes first letter of each word
        printf('<li><a href="related.php?query=%1$s" title="%1$s" >%1$s</a></li>', $test3);

        if (++$counter > 10) {
            break 2;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多