Я хочу другую переменную для вещей, которые проходят stristr, но не должны содержать ничего, кроме этих 3 разных вещей

У меня есть следующий код:-

$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'] имеет соединенные штаты, соединенное королевство или канаду, тогда он должен пройти, иначе, если есть другие значения, отличные от указанных выше, он должен войти в остальное.

Пример:- Объявление 1 имеет: (Соединенные Штаты; Соединенное Королевство) > Тогда оно должно пройти как $adsptc4 Объявление 2 имеет: (Соединенные Штаты; Италия) > Тогда оно должно завершиться неудачей.

Дайте мне знать, если вы что-то не поняли.

<?
$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";
}
?>

Хорошо работает, дайте мне знать, если есть какие-либо недостатки из этого.

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
}

Исеть ():

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

чтобы найти записи, они должны быть абсолютно одинаковыми, поэтому все записи в $ позволены строчными буквами, а ваш ввод $ad['country'] изменен на строчные.

Оба варианта возможны. Я предпочитаю второй, потому что я могу дать некоторую дополнительную информацию (вместо истины я мог бы дать специальный массив или что-то еще), который мог бы быть обработан.

После вашего второго редактирования:

Вы можете взорвать данные страны и проверить каждую:

$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
}
Другие вопросы по тегам