Если НЕ одно из двух определённых значений, то умолчание. Как сделать это в PHP?

193
25 августа 2018, 15:30

Мой скрипт на PHP принимает два языковых значения - &lang=ru или &lang=en. Если параметр lang явно не указан или равен любому другому значению, то значение по умолчанию должно быть установлено в en. Я несколько раз прочитал документацию по логическим операторам в PHP, но так и не могу понять, как реализовать проверку

если не ((lang = "en") или (lang = "ru")) тогда lang = "en"

на PHP. На привычном мне Паскале я легко делаю вот так:

if not ((lang = 'en') or (lang = 'ru')) then lang := 'en';

Я потратил уйму времени, пытаясь реализовать эту нехитрую конструкцию на PHP, но у меня ничего не получается. Силюсь понять что я делаю не так вот в этом коде:

if (!(($lang == "en") || ($lang == "ru"))) {
  $lang = "en";
};


Решение проблемы

После того, как Anton Shchyrov указал, что логическое выражение совершенно правильное, я начал отлаживать скрипт и нашел ошибку.

Через полсотни строк я не заметил ошибку, характерную для тех, у кого нет опыта программирования на языках, по синтаксису похожих на C/C++/PHP. Ниже проблемный кусок кода, который останавливает шоу:

$Link = "https://www.domain.dummy/page.html;
if ($lang = "ru") {
  $Link = str_replace("dummy", "ru", $Link);
} else {
  $Link = str_replace("dummy", "co.uk", $Link);
}

Присвоение значения переменной в условии if () не может не впечатлять, но из-за этого скрипт, разумеется, "снесло".

Не знаю как поступить в данном случае - следует ли попросить закрыть вопрос или оставить его?

Answer 1

Ну раз уж все в ответы пишут=)

if (!in_array($lang, ['es', 'en', 'ru', 'fr'])) $lang = "en";

Любое количество предопределённых языков в одном условии.

А ещё можно тернарно

$lang = in_array($lang, ['es', 'en', 'ru', 'fr']) ? $lang : "en";

Список предопределяемых языков это массив который можно хранить в переменной

$langs = ['es', 'en', 'ru', 'fr'];
// Аналогично
$langs = array('es', 'en', 'ru', 'fr');
Answer 2

Мой скрипт на PHP принимает два языковых значения - &lang=ru или &lang=en. Если параметр lang явно не указан или равен любому другому значению, то значение по умолчанию должно быть установлено в en.

Дефольтный язык en, если задан ru то язык будет ru.

$lang = !isset($lang) || $lang !== 'ru'? 'en': 'ru'; 
echo $lang;
Answer 3

:D Раз уж такая движуха... Сложно было придумать что-то новенькое, но я справился:

switch ($lang) {
    case 'ru':
    case 'en':
        break;
    default:
        $lang = 'en';
        break;
}
READ ALSO
Как в php отделить номер от текста

Как в php отделить номер от текста

Привествую,есть код:

181
Номер телефона аккаунта в инстаграм

Номер телефона аккаунта в инстаграм

Есть id, username и ссылка на аккаунта, необходимо узнать номер телефона владельцаВ instagramm-scrapper порылся в абстрактных моделях, и даже не нашел намека...

187
Чтение из массива объектов

Чтение из массива объектов

Хочу из такого JSON

194
Как принять JSON ответ на PHP?

Как принять JSON ответ на PHP?

На фронте при нажатии на кнопку собираю все данные с форми в JSON и отправляю на сервер

170