PHP如果语句被覆盖

时间:2012-05-02 15:36:03

标签: php if-statement

我正在搜索搜索页面,其中一个结果信息就是位置。要搜索的内容之一是音乐专辑(没有位置信息)。

http://www.flcbranson.org/freedownloads-search.php

如果你搜索“摇滚”,你会看到神的和平--Pt。 3 - 我的摇滚与位置信息(这不是它应该的方式)。如果你搜索“我的摇滚”,你会注意到没有列出同一记录的位置信息(它应该是这样的)。这就像if语句被覆盖,如果另一个结果确实有位置信息。

音乐专辑中有$row["Number"]的Music01,Music02等......所有其他记录都应为空或数字(应该都小于Musicxx。据我所知,这段代码应该是如果它不是音乐专辑,则仅显示位置信息。

<?php
foreach ($stmt as $row) {
    if ($row["Number"] < "Music01") {
        if ($row["Location"]) $location = $row["Location"];
        else $location = "Faith Life Church";
        if ($row["City"]) $city = $row["City"];
        else if ($row["Sarasota"]) $city = "Sarasota";
        else $city = "Branson";
        if ($row["State"]) $state = $row["State"];
        else if ($row["Sarasota"]) $state = "FL";
        else $state = "MO";
    }
    if ($location) {
?>
<li><?php echo $location; ?></li>
<?php
    }
}
?>

我错过了什么,这里?

JJ

3 个答案:

答案 0 :(得分:2)

当您以这种方式比较字符串时,您实际上是在说任何不等于Music01的字符串。它会变得复杂。见http://php.net/manual/en/language.operators.comparison.php

获取一个真正的整数,然后进行比较以获得更可预测的结果。

答案 1 :(得分:1)

你做错了。首先初始化变量,然后根据需要覆盖它们。这将防止您可能丢失案例并且未定义变量的任何奇怪现象。

$location = "Faith Life Church";
$city = "Sarasota";
/*...*/
foreach ($stmt as $row) {
    foreach ($row as $variable => $value) {
        $variable = strtolower($variable); //Location => location
        $$variable = $value; //$location = $value
    }

}

除此之外,您要将数字与字符串进行比较。从字符串中删除数字,然后进行比较。

答案 2 :(得分:0)

问题在于您将字符串与小于<的字符串进行比较,每次都会返回true。你只需要在数组键中检查“音乐”这个词吗?

if (strpos($row["Number"], 'Music') !== false) {

}