0

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

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

如果你搜索“rock”,你会看到 The Peace Of God - Pt. 3 - 带有位置信息的 My Rock(这不是应该的方式)。如果您搜索“my rock”,您会注意到没有为同一记录列出位置信息(应该是这样)。如果另一个结果确实有位置信息,就好像 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

4

3 回答 3

2

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

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

于 2012-05-02T15:40:58.730 回答
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
    }

}

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

于 2012-05-02T15:43:14.717 回答
0

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

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

}
于 2012-05-02T15:42:25.330 回答