1

我正在编码组的位置,用户可以根据位置进行搜索以找到离他们最近的组。字段是:国家、州、城市、社区。假设美国有十个组——我不希望它列出选项 USA 十次。我添加了一个 strpos 以便它只会列出一次,但我得到了一个错误。

这是php代码:

<?php
$myQuery = "select country, state, city, neighborhood from groups WHERE group_status = 'open to new members'";

$rs = mysql_query($myQuery);

$country_options = $state_options = $city_options = $neighborhood_options = '';

while($get_row = mysql_fetch_assoc($rs)){

$pos_country = strpos($get_row['country'], $country_options);

if($pos_country === false) {
echo $country_options .= "<option value='" . $get_row['country'] . "'>" . $get_row['country'] . "</option>";}

$pos_state = strpos($get_row['state'], $state_options);
if($pos_state === false) {
echo $state_options .= "<option value='" . $get_row['state'] . "'>" . $get_row['state'] . "</option>";}

$pos_city = strpos($get_row['city'], $city_options);
if($pos_city === false) {
echo $city_options .= "<option value='" . $get_row['city'] . "'>" . $get_row['city'] . "</option>";}

$pos_neighborhood = strpos($get_row['neighborhood'], $neighborhood_options);
if($pos_neighborhood === false) {
echo $neighborhood_options .= "<option value='" . $get_row['neighborhood'] . "'>" . $get_row['neighborhood'] . "</option>";}

}
?>

它输出以下错误:

警告:strpos():第 66 行的 sidebar.php 中的空分隔符

警告:strpos():第 70 行的 sidebar.php 中的空分隔符

警告:strpos():第 73 行的 sidebar.php 中的空分隔符

警告:strpos():第 76 行的 sidebar.php 中的空分隔符

在错误下方,它有一个带有正确字段的漂亮表单:国家、州、城市、社区。它只是多次列出相同的国家。

4

1 回答 1

3

delimiterforstrpos()是传入的第二个参数。

在您的代码中,您从以下内容开始:

$country_options = $state_options = $city_options = $neighborhood_options = '';

这些都是您用作分隔符的值,它们都是空的 - 因此您的错误。使用给定密钥执行检查后,然后设置它。例如:strpos()

$pos_country = strpos($get_row['country'], $country_options);
if($pos_country === false) {
    echo $country_options .= "<option value='" . $get_row['country'] . "'>" . $get_row['country'] . "</option>";
}

我不确定您要使用 搜索什么字符$country_options,但您会立即在其上附加一个<option></option>标签(这是一个非常长的分隔符)。您是否使用了错误的变量作为您要搜索的字符?

编辑
重新阅读您的问题后,我了解您要实现的目标(我认为)。您只是不想多次显示同一个国家、州、城市或社区。

为了实现这一点,保留一个“可见”值数组并在每个循环中检查该数组可能会更容易。尝试这样的事情:

$countries = array();
$states = array();
$cities = array();
$neighborhoods = array();

while($get_row = mysql_fetch_assoc($rs)) {
    if (!in_array($get_row['country'], $countries)) {
        $country_options .= '<option value="' . $get_row['country'] . '">' . $get_row['country'] . '</option>';
        $countries[] = $get_row['country'];
    }

    if (!in_array($get_row['state'], $states)) {
        $state_options .= '<option value="' . $get_row['state'] . '">' . $get_row['state'] . '</option>';
        $states[] = $get_row['state'];
    }

    if (!in_array($get_row['city'], $cities)) {
        $city_options .= '<option value="' . $get_row['city'] . '">' . $get_row['city'] . '</option>';
        $cities[] = $get_row['city'];
    }

    if (!in_array($get_row['neighborhood'], $neighborhoods)) {
        $neighborhood_options .= '<option value="' . $get_row['neighborhood'] . '">' . $get_row['neighborhood'] . '</option>';
        $neighborhoods[] = $get_row['neighborhood'];
    }
}
于 2012-11-08T21:09:20.243 回答