isset — PHP это один набор значений, а не другой

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

if($var1 == $var2) {// They may be the same
if((isset($var1) && !isset($var2)) || (!isset($var1) && isset($var2))) { // Is one set, and not the other?
return true; // As different as we'll allow
}
return false;   // Nope they're the same
}
return true;      // Definitely different

Мой вопрос будет в основном, учитывая приведенный выше блок кода, есть ли более простой способ проверить, установлено ли одно значение, а не другое?

РЕДАКТИРОВАТЬ: Причина, по которой я проверяю равенство в первую очередь, в том, что значение может пройти 1 == 10 или 10 == ’10’, в этом случае мне не нужно проверять дальше, но если ноль == 0, это будет пройти и требовать дальнейшей проверки. Я видел, что могу передать несколько значений в isset, что сработало бы, если бы мне потребовалось установить оба или оба не установить, но если одно, а не другое, это то место, где мне нужно пометить.

0

Решение

Вы проверяете на равенство до проверка, если они установлены.

Я бы рекомендовал проверить, если они установлены в первую очередь.

Если цель PURE состоит в том, чтобы проверить, установлен ли один, а не другой, то:

return ( ( empty($var1) && ! empty($var2) ) || ( ! empty($var1) && empty($var2) );

По комментариям, isset это требование, поэтому эта версия:

return ( ( isset($var1) && ! isset($var2) ) || ( ! isset($var1) && isset($var2) );

И, перейдите к @deceze, чтобы предложить еще более простую версию:

return ( isset($var1) != isset($var2) );
0

Другие решения

Использование оператора объединения нулей может пригодиться …

return ($var1 ?? null) !== ($var2 ?? null);

Проверяет, что они не равны и хотя бы один определен и не равен нулю.

0

По вопросам рекламы [email protected]