在foreach中的Php elseif条件

时间:2012-01-08 23:30:16

标签: php arrays foreach conditional-statements if-statement

我对foreach外观中的if / elseif条件有这个问题。我一遍又一遍地搜索,真的没有想法。 所以我有这个数组:

阵 (

[0] => stdClass Object
    (
        [title] => main
        [value] => value1
    )

[1] => stdClass Object
    (
        [title] => other
        [value] => value2
    )

[2] => stdClass Object
    (
        [title] => second
        [value] => value3
    )

[3] => stdClass Object
    (
        [title] => other
        [value] => value4
    )

[4] => stdClass Object
    (
        [title] => other
        [value] => value5
    )

正如您所见,obj0的title => main而obj2的title =>秒,其余的“titles”则设置为other。

我有这个foreach:

foreach ($objects as $object): 
    if($object->title == 'second') { 
        //this value is rarely added, so it must have a "priority" and be showed
        echo '<span></span>';
    } elseif($object->title == 'main') { 
        //i mostly want to show this, but not if $object->title has the value 'second'.
        echo '<div></div>';
    }
endforeach;

这个循环返回“span”和“div”,我不想要。我无法设法只显示title =&gt;“second”(如果它在那里),而title =&gt;“main”仅在“second”不存在时才显示。所以要么显示跨度,要么是div。

希望我解释好,如果不是我道歉!非常感谢,非常感谢你的帮助!

的Marius

2 个答案:

答案 0 :(得分:2)

如果任何一个位置可能出现在数组中的任何位置 - 即main可能出现在second之前(看起来就是这种情况) - 在做出决定之前,你必须循环整个数组显示:

$main = $second = FALSE;
foreach ($objects as $object): 
    if($object->title == 'second') { 
        $second = TRUE;
        break; // Added as @PeterKrejci pointed out
    } elseif($object->title == 'main') { 
        $main = TRUE;
    }
endforeach;

if($second) { 
    echo '<span></span>';
} elseif($main) { 
    echo '<div></div>';
}

如果second始终显示在main之前,那么所需要的只是break的几个:

foreach ($objects as $object): 
    if($object->title == 'second') { 
        echo '<span></span>';
        break;
    } elseif($object->title == 'main') { 
        echo '<div></div>';
        break;
    }
endforeach;

答案 1 :(得分:1)

Foreach迭代该数组中的所有条目,因此您必须在第一次匹配后将其中断,您可以在break;之后使用echo跳出foreach