0
나는 다음과 같은 코드에서 일하고 있어요

:논리 AND 조건

// $data has only one dimension AND at least one of its values start with a "@" 
if ((count($data) == count($data, COUNT_RECURSIVE)) 
    && (count(preg_grep('~^@~', $data)) > 0)) 
{ 
    // do nothing 
} 

else 
{ 
    // do something 
} 

이 조건의 논리를 평가하는 동안 나는 빈 if 블록을 없애 수 있다면 내가 선호하지만, 잘 작동하고 문자열 변환에 배열 :

공지 사항 : - 최초의 하나에 해당하는 산출 경우에만 두 번째 조건은 $data 하나 이상의 차원이있는 경우 그렇지 않으면 preg_grep() 호출은 다음 사항을 던질 것이다

가 나는 오류 억제 연산자 또는 다른 해키 방법을 사용할 수 있습니다 알고,하지만 난 사소한 뭔가를 누락 느낌이있다. 누군가 나를 도와 줄 수 있습니까?

+0

'&&'이미 단락 회로가 ... 그렇지 않습니까? – Ryan

답변

3

첫째, 확실한 방법 :

if (!((count($data) == count($data, COUNT_RECURSIVE)) 
    && (count(preg_grep('~^@~', $data)) > 0))) 
{ 
    // everything is cool, nothing to do 
} 

else 
{ 
    // do something 
} 

둘째, 올바른 방법

if ((count($data) < count($data, COUNT_RECURSIVE)) 
|| (count(preg_grep('~^@~', $data)) == 0)) 
{ 
    // everything is cool, nothing to do 
} 

else 
{ 
    // do something 
} 
+0

분명히 감사합니다! :) –

2
if (!((count($data) == count($data, COUNT_RECURSIVE)) && (count(preg_grep('~^@~', $data)) > 0))) 

2
if (! (
    count($data) == count($data, COUNT_RECURSIVE) && 
    count(preg_grep('~^@~', $data)) > 0 
    ) 

랩 조건의 전체 그룹 { // 뭔가 을}과 채찍! 처음에는. 줄 바꿈은 읽기 쉽도록 만들어졌습니다. 나는 개별 조건 주위의 불필요한()을 제거했다.

+0

감사합니다. 나는이 연산자를 사용하여 거의 존재하지 않는다는 것을 잊을 때가 있습니다. –

1

난 당신이 요구하는지 완전히 명확하지,하지만 난 당신이 원하는 생각 :

// $data has only one dimension AND at least one of its values start with a "@" 
if (!((count($data) == count($data, COUNT_RECURSIVE)) 
    && (count(preg_grep('~^@~', $data)) > 0))) 
{ 
    // do something 
} 

((count($data) == count($data, COUNT_RECURSIVE)) && (count(preg_grep('~^@~', $data)) > 0))이 거짓이면이 블록이 실행됩니다.