0

私はこの次のコードを持っています:-

$unitedstatess = stristr($ad['country'], 'united states');
            $unitedkingdom = stristr($ad['country'], 'united kingdom');
            $canada = stristr($ad['country'], 'canada');

            if (($unitedstatess != FALSE) OR ($unitedkingdom != FALSE) OR ($canada != FALSE)) { $adsptc4.=$tempcode; }

$ ad ['country']に米国、英国、またはカナダがある場合は合格するか、上記以外の値がある場合は残ります。

例:-Ad1は:(米国;英国)>次に$adsptc4として通過する必要がありますAd2は:(米国;イタリア)>次に失敗するはずです。

あなたが何かを理解していなかったら私に知らせてください。

<?
$ad['country'] = "United States;canada";
$allowed = array(
    'united states' => true,
    'united kingdom' => true,
    'canada' => true
);
$countries = strtolower($ad['country']);
$countries = explode(";", $countries);
$found = false;
foreach($countries as $c) {
    if(isset($allowed[$c]) == FALSE) {
        $found = true;
        break;
    }
}
if($found != true) {
    echo "true";
}
else {
    echo "false";
}
?>

うまくいきます。欠点があるかどうか教えてください。

4

1 に答える 1

1

すべての「許可された」エントリを配列に格納できます。array_search()またはisset()で確認してください

array_search():

$allowed = array('united states', 'united kingdom', 'canada');
$input = strtolower($ad['country']);
if(array_search($input, $allowed) !== false) {
    //your true code
}
else {
    //your else code
}

isset():

$allowed = array(
    'united states' => true,
    'united kingdom' => true,
    'canada' => true
);
$input = strtolower($ad['country']);
if(isset($allowed[$input])) {
    //true
}
else {
    //false
}

エントリを見つけるには、それらが完全に同じである必要があります。そのため、$ allowedのすべてのエントリは小文字であり、入力$ad['country']は小文字に変更されます。

両方のオプションが可能です。処理可能な追加情報(trueの代わりに特別な配列などを指定できる)を提供できるため、2番目の情報を使用することをお勧めします。

2回目の編集後:

あなたは与えられた国を爆発させて、それぞれをチェックすることができます:

$countries = strtolower($ad['country']);
$countries = explode(";", $countries);
$found = true;
foreach($countries as $c) {
    $c = trim($c);
    if(!isset($allowed[$c])) {
        $found = false;
        break;
    }
}
if($found == true) {
    //true
}
else {
    //false
}
于 2011-03-06T15:03:58.860 に答える