1

グループの場所をコーディングしています。ユーザーは場所に基づいて検索し、グループに最も近いグループを見つけることができます。フィールドは、国、州、都市、近隣です。米国に10のグループがあるとしましょう。オプションUSAを10回リストしたくありません。一度だけリストされるように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

delimiterforは、渡される2番目のstrpos()パラメーターです。

コードでは、次のように開始します。

$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>タグを追加します(これは非常に長い区切り文字の1つです)。おそらく、検索している文字として間違った変数を使用していますか?

編集
あなたの質問を読み直した後、私はあなたが達成しようとしている目標を理解しています(私は思います)。同じ国、州、都市、または近隣を複数回表示したくないだけです。

これを実現するには、「表示された」値の配列を保持し、各ループでその配列を確認する方が簡単な場合があります。次のようなものを試してください。

$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 に答える