2013-04-19 5 views
0

다음 코드는 $this->userKeyword$this->userAllergens의 두 배열을 통해 반복됩니다. 제 배열이 포함되어 있으면2 foreach 문 내의 논리

foreach($this->userKeyword as $keyword){ 
    foreach($this->userAllergens as $allergens){ 
     if($keyword['keywordid'] != $allergens['keywordid']){ 
      ?> 
      <label><?php echo $keyword['name'];?></label> 
      <input type="checkbox" name="<?php echo $keyword['name'];?>" value="<?php echo $keyword['keywordid'];?>" /><br /> 
      <?php 
     } 
    } 
} 

는 '1', '2', '3'은, '4'와 제 2 어레이는 시점 '3'과 '4'가 포함 된 경우 상기 제 루프 안쪽 '3'을 포함하는 반복에서 '1', '2'및 '4'를 표시하고 '4'를 포함하는 반복에서 '1', '2'및 '3'을 표시합니다.

내 문제는 두 배열 내에 값이 없을 때만 표시되도록 코드를 변경해야한다는 것입니다.

여기서는 '1'과 '2'를 표시하고 '3'과 '4'는 표시하지 않습니다.

어떤 조언이 필요합니까? 건배!

+0

내가 바로 당신을 이해한다면, 두 번째 foreach는 최초의 내부하지만 외부 사용자의 출력을하려고합니다. – pmayer

답변

2

더()와 in_array 사용할 수 있습니다. 부울 플래그는 엄격한 비교 작업을 수행하는지 여부를 설정하므로 오해의 소지가있는 결과를 초래할 수 있으므로주의하십시오.

http://php.net/manual/en/function.in-array.php

+0

엄격한 비교가 문제가되지 않도록 내 배열에 ID가 포함되어 있습니까? – sark9012

+0

아마도,하지만 PHP에 대한 비교를 위해 캐스팅하기 때문에 경고하고 싶었을뿐입니다. (즉, 1 == 참) – Schleis

1

array_diff를 사용하십시오 (http://php.net/manual/en/function.array-diff.php 참조). 당신은 in_array 기능을 사용

foreach($this->userKeyword as $keyword){ 
    if(!(in_array($keyword, $this->userAllergens, true)) { 
     echo "$keyword"; 
    } 
} 

: 당신은 또한 당신이 원하는 제대로 이해하고 있지만, array_diff이

+0

내가 마음에 가지고 있었던 정확한 기능처럼 보입니다. 배열에 간단한 코드 예제를 제공 할 수 있습니까? 나는 그것을 구현하려고 시도했지만 오류가 발생했습니다! – sark9012

+0

1 [3] => 4) ?> –

+0

쓸만한 것을 놓쳤습니다. –