2014-10-23 2 views
0

다음과 같은 기능이 있습니다. 한 값을 배열의 각 값과 비교합니다.PHP - '휴식;'을 사용하는 방법 삼항 연산자에서

function catExists($id) { 
    $cats = getCats(); 
    foreach ($cats as $cat) { 
     if ($cat['id'] == $id) { 
      return true;break; 
     } else { 
      return false; 
     } 
    } 
} 

나는 3 진수 연산자를 사용하여 모든 것을 단축하려고합니다.

function catExists($id) { 
    foreach (getCats() as $cat) return ($cat['id'] == $id) ? true : false; 
} 

내가 가진 문제는 조건이 true로 바뀌면 내가 break;를 사용할 수 있다는 것입니다. 즉, true 조건이 array의 끝이 아니면 반환 값은 false으로 되돌아갑니다.

이 방법을 한 줄로 구현할 수 있습니까?

감사합니다.

+0

을 나는이 생각 과잉. 이것은 삼항 연산의 의미가 아닙니다. – karthikr

+0

휴식은 전혀 무의미합니다. 'return'은 함수를 종료 시켜서'break' 도달 할 수없는 코드를 만듭니다. 그리고 당신이'if()'의 두 가지 브랜치에'return '을 가지고 있기 때문에, 당신의 루프는 한 번만 반복 할 수 있습니다. –

+0

Karth, 이것은 과잉이라고 논쟁하지 않습니다 :-). 고마워 마크, 나는 그 사실을 알고 있지 않았다. – Swift

답변

1

그건 삼항 연산자가 의미하는 것이 아닙니다. 단순하게 유지하십시오 (KISS). return은 함수 실행을 끝내고 프로그램 제어를 주 프로그램으로 되 돌리므로 break 문은 전혀 필요하지 않습니다.

내가 이런 식으로 쓰는 것 : 당신이 정말로 그것을 한 라인을 확인하려면 당신과 같이 와 함께 array_column()을 사용할 수,

function catExists($id) { 
    foreach (getCats() as $cat) { 
     if ($cat['id'] == $id) 
      return true;   
    } 
    return false; // 'return true' never happened, so return false 
} 

을 :

function catExists($id) { 
    return array_search($id, array_column(getCats(), 'id')) !== FALSE; 
} 
+0

나는 동의한다. 그것은 잔인한 것이지만, 내 뇌는 혼란스러워지고 있습니다. 좋은 대안과 같은 최소한의 이음새가 간다. 어쨌든, 고맙습니다 .-) – Swift