programing

변수가 여러 문자열 값과 같지 않은지 확인하는 더 간단한 방법은?

sourcejob 2023. 10. 11. 20:40
반응형

변수가 여러 문자열 값과 같지 않은지 확인하는 더 간단한 방법은?

현재 코드:

<?php

  // See the AND operator; How do I simplify/shorten this line?
  if( $some_variable !== 'uk' && $some_variable !== 'in' ) {

    // Do something

  }

?>

그리고:

<?php

  // See the OR operator; How do I simplify/shorten this line?
  if( $some_variable !== 'uk' || $some_variable !== 'in' ) {

    // Do something else

  }

?>

두 조건을 더 간단하게 쓸 수 있는 방법이 있습니까?

참고: 네, 서로 다르며 코드를 단축할 수 있는 다양한 방법이 있을 것으로 예상됩니다.

첫 번째 코드의 경우 @ShankarDamodaran에서 제공하는 답변을 다음과 같이 간단히 변경할 수 있습니다.

if ( !in_array($some_variable, array('uk','in'), true ) ) {

더 짧게, 더 짧게, 더 짧게.[]@Forty가 코멘트에서 지적한 것처럼 php 5.4 이후부터 사용 가능한 표기법

if ( !in_array($some_variable, ['uk','in'], true ) ) {

는 다음과 같습니다.

if ( $some_variable !== 'uk' && $some_variable !== 'in' ) {

... 더 짧습니다.특히 'uk'과 'in'을 비교하는 것 이상의 의미를 가진다면 더욱 그렇습니다.추가 변수(Shankar used $os)사용하지 않고 if 문에 배열을 정의합니다.어떤 사람들은 더럽다고 생각할 수도 있고, 나는 그것이 빠르고 깔끔하다고 생각합니다:D

두 번째 코드의 문제는 다음과 같은 이유로 TRUE와 쉽게 교환할 수 있다는 것입니다.

if (true) {

대등한

if ( $some_variable !== 'uk' || $some_variable !== 'in' ) {

문자열의 값이 A 또는 Not B가 아닌지 묻는 것입니다.A이면 B도 아니고 B면 A도 아닙니다.그리고 C이거나 말 그대로 다른 것이라면 역시 A도 아니고 B도 아닙니다.그래서 그 진술은 항상 사실로 돌아옵니다(여기서 슈뢰딩거 법칙을 고려하지 않음).

PHP에서 활용할 수 있습니다.

$os = array("uk", "us"); // You can set multiple check conditions here
if (in_array("uk", $os)) //Founds a match !
{
    echo "Got you"; 
}

나는 Habchi가 댓글로 사용한 코드를 좋아합니다.

if(!($some_variable === 'uk' || $another_variable === 'in')){//do}

특히 이 테스트가 여러 번 이루어지고 있고 PHP 7+를 실행하고 있고 설치한 경우에는 말이 될 수 있는 대안입니다.Set클래스는:

use Ds\Set;

$strings = new Set(['uk', 'in']);    
if (!$strings->contains($some_variable)) {

또는 PHP의 모든 버전에서는 연관 배열을 사용하여 집합을 시뮬레이션할 수 있습니다.

$strings = ['uk' => 1, 'in' => 1];
if (!isset($strings[$some_variable])) {

세트를 생성할 때 추가 오버헤드가 발생하지만 각 테스트는 O(1) 연산이 됩니다.물론 비교되는 문자열 목록이 길수록 절감 효과가 커집니다.

if 문에 함수를 구축할 예정이라면 in_array를 사용하는 것도 권장합니다.훨씬 깨끗합니다.

변수에 값을 할당하려는 경우 if/else 축약어를 사용할 수 있습니다.

$variable_to_fill = $some_variable !== 'uk' ? false : true;

다중값 확인이 필요합니다.다음 코드를 사용해 보십시오.

<?php
    $illstack=array(...............);
    $val=array('uk','bn','in');
    if(count(array_intersect($illstack,$val))===count($val)){ // all of $val is in $illstack}
?>

논리를 뒤집고 if가 비어 있는 다른 문장을 사용하는 것이 더 읽기 쉽다는 것을 알 수 있습니다.

if($some_variable === 'uk' || $another_variable === 'in'){}

else {
    // This occurs when neither of the above are true
}

어떤 기본적인 리젝스가 잘 해줄 겁니다$some_variable !== 'uk' && $some_variable !== 'in':

if(!preg_match('/^uk|in$/', $some_variable)) {
    // Do something
}

언급URL : https://stackoverflow.com/questions/19949923/simpler-way-to-check-if-variable-is-not-equal-to-multiple-string-values

반응형