如果声明内部或外部

时间:2011-11-21 18:59:47

标签: php

我正在试图弄清楚我是否需​​要在for循环内或for循环之外执行此操作但是我想先检查它是否为空。

echo "<ul>";
for($x = 0; $x <= (count($quotesArray)-1); $x++)
{
    echo "<li>".stripslashes($quotesArray[$x]->quote)."</li>";
}
echo "</ul>";

5 个答案:

答案 0 :(得分:2)

它需要在循环之外,因为如果它是空的,并且你没有生成任何列表项,那么你没有列表,所以你不应该生成ul开始和结束标记(因为列表没有列表项无效)。

答案 1 :(得分:2)

如果您根本不想要列表,那么您应该在第一个<ul>的瘙痒之前执行此操作

if(count($quotesArray) > 0){
//Do your echos and loops in here
}

答案 2 :(得分:2)

您可以同时执行两项检查。

if($quotesArray){
    echo '<ul>';
    foreach ($quotesArray as $quote) {
        if ($quote) {
            echo '<li>' . stripslashes($quote->quote) . '</li>';
        }
    }
    echo '</ul>';
}

答案 3 :(得分:2)

在循环中检查更简单 - 过滤所有值并称为array_filter() function

$quotesArray = array_filter($quotesArray);
echo "<ul>";
foreach($quotesArray as $quote){
    echo "<li>".stripslashes($quote)."</li>";
};
echo "</ul>";

以上假设$quotesArray包含字符串(或在字符串上下文中正常工作的元素),并且在转换为布尔值时,您不希望仅评估为false的元素({{3} })。

此外您可以进一步简化代码

$quotesArray = array_filter($quotesArray);
$quotesArray = array_map('stripslashes', $quotesArray);
echo '<ul><li>'.implode('</li><li>', $quotesArray).'</li></ul>';

如果您知道$quotesArray至少包含一个元素。

修改

短版本,也检查是否应该生成列表(换句话说:处理后数组是否包含至少一个元素):

$quotesArray = array_map('stripslashes', array_filter($quotesArray));
if (!empty($quotesArray)) {
    echo '<ul><li>'.implode('</li><li>', $quotesArray).'</li></ul>';
};

答案 4 :(得分:1)

当你说你想检查它是否为空时,你的意思是整个$ quotesArray还是其中的一个值?

如果您的意思是要检查数组中的值是否为空,您可以考虑这种方法:

echo '<ul>';
foreach ($quotesArray as $quote) {
    if ($quote) {
        echo '<li>' . stripslashes($quote) . '</li>';
    }
}
echo '</ul>';