2011-03-02 4 views
0

나는 or이 들어간 if 성명을 가지고 있습니다.이 간단한 IF 또는 OR 문을 수행하는 방법입니까?

if($count == 1 || $count == 3 || $count == 7) { 
    // do stuff 
} 

난 그냥 궁금 해서요 -이이 작업을 수행하는 가장 좋은 방법입니다? 위의 간단한 예제를 통해이 작업을 수행하는 더 빠른 방법이 있습니까? 그렇다면 무엇입니까?

+0

더 빠른 방법을 요청하면이 코드와 관련된 성능 문제가 있습니까? –

+0

동일한 성능을 얻을 수있는 지름길이 있는지 궁금해하는 성능 문제가 없습니다. 거기에 10 또는 진술이있을 때 약간 길고 반복적 일 수 있습니다. – willdanceforfun

답변

3

코드가 올바르게 작동합니다. 또는, 당신은 비트 깨끗하고 확장 in_array()을 사용할 수 있습니다 더 나은 :

if (in_array($count, array(1,3,7))) { ... } 
+2

사실, 이것은 원래 예제보다 약 4 배 느립니다 ... 내 서버에서 116ms vs 449ms가 백만 번 실행되는 것을 허용했습니다 ... 훨씬 깨끗하고 읽기 쉽습니다. 적은 양의 데이터 만 있으면 속도는 무시할 수 있습니다. 큰 일로 - in_array 성능이 매우 느립니다. – Sergey

+1

@ Sergey 글쎄, 그런 경우에는 큰 배열을 만난 적이없는 것 같은가요? –

+0

당신이 거기에 백만 가지의 물건을 붙이면, 당신은 그것을 잘못하고 있습니다. –

1

당신은 배열의 가능한 모든 값을 할당하고 array_search 기능

$array=array(1,3,7); 

if (array_search($count,$array) !== FALSE) 
{ 
    //do stuff 
} 
3

당신이 작성한 코드를 사용하여 확인할 수 있습니다 괜찮습니다. 폴 슈라이버 (Paul Schreiber)가 말했듯이, 조금 깔끔한 다양한 옵션이 있습니다.

당신이 생각해 볼 수도있는 한 가지는 (그리고 이것은 단지 예일뿐입니다) 검사하는 값이 중요한 이유입니다. 그들은 모두 당신이 확인하고있는 공통점이 있습니까? 그렇다면 속성을 상징적으로 말하면 누군가가 이해하기 쉽게 코드를 작성할 수 있습니다. 예를 들어 :

if (is_odd($x) && $x < 10) { 
    //... 
} 

오히려

if ($x == 1 || $x == 3 || $x == 5 || $x == 7 || $x == 9) { 
    //... 
} 

이상이 꽤 인위적인 예입니다, 그러나 희망 당신은 나가에 얻고 무엇을 참조하십시오. 좀 더 구체적인 예를 들어

, 대신 같은 일을의 :이 수,

if (eligible_for_discount($user, $num_items)) { 
    // Give this user a discount 
} 

당신 만이 한 곳에서 함수를 사용하는 경우에도 :

if ($user->age > 65 
    || $user->years_of_custom > 3 
    || $num_items > 5) { 
     // Give this user a discount .... 
} 

당신이 수행 할 수 있습니다 코드의 가독성을 높입니다. 분명히 당신은 당신의 판단을 사용해야 만합니다. 왜냐하면 당신은 유지 보수 할 코드가 많아지기 때문에 가독성을 높이기 때문입니다. 그리고 항상 올바른 선택이되는 것은 아닙니다. 조건이 서로별로 관련이 없다면, 별도의 함수로 바인딩하면 이해가되지 않을 것이고 코드를 더 쉽게 따르지 않게 될 것입니다. 코드가 실제로 의미하는 것, 그리고 인간이 그것을 이해하는 방법에 중점을 두십시오.

+0

+ 잘 생각해 보면 – codercake

+0

고맙습니다. 나는 is_odd 함수가 있는지 몰랐다. – willdanceforfun

0

switch 성명이 더 좋지 않습니까?

switch ($count) { 
    case 1: 
    case 3: 
    case 7: 
    echo "do stuff"; 
    break; 
} 
+0

1,3,7 및이 모든 값이 동적 인 경우 변수 또는 배열에서 스위치 통계를 어떻게 바꿀 수 있습니까? – Daric

관련 문제