2013-12-19 2 views
0

다차원 배열이 있는데 배열 키가 두 개 이상의 값으로 구성되어 있는지 확인하고 싶습니다. count을 사용하여 각 배열 키의 모든 값을 계산하고 별도의 배열에 넣고 내가 가지고 :in_array 문제가

Array 
(
    [0] => 1 
    [1] => 1 
    [2] => 1 
    [3] => 1 
) 

I :

Array 
(
    [0] => 1 
    [1] => 4 
    [2] => 6 
    [3] => 2 
) 

지금, 내 문제는 내가 배열의 경우처럼, 두 개 이상의 값이나 하나의 값을 반환하는 경우 그래서 난 조건을 만들 수를 필터링 할 필요가있다 지금까지이 코드를 가지고 있지만 항상 내 함수 display_single_passage()으로 진행됩니다. 당신은 숫자보다 2

foreach ($passageArray as $sentences) { 
      $count = count($sentences); 
      $sentenceCount[] = $count; //This is my array of counted values 
     } 
      if (in_array("/[^2-9]+/", $sentenceCount)) { 
       display_multiple_passage(); 
      } else { 
       display_single_passage(); 
      } 
+0

그래서 당신은 유일한 요소에 이상이 _at 적어도 one_ 부분 배열이 있는지 알 필요가? – Passerby

+0

in_array는 정규 표현식을 지원하지 않습니다 – Nightmare

+0

그래, 적어도 하나의 하위 배열이 있는지 알아야합니다 .. 나는 그것을 복잡하게 보았고, 다소 배우기 시작했음을 알고 있습니다. =) – Fox

답변

1

을 찾고 있다면 당신이 실제로 정규식을 검색 할 수 있습니다 경우 완전히 확실하지 않다 나는 내 문제는 in_array 내 생각하지만 난 확인하는 방법을 알아낼 수없는 것 배열에서 또는 실제 문자열 "/[^2-9]+/". 이 문제를 쉽게 해결할 수있는 방법은 배열을 직접 루프로 묶고 값을 확인하는 것입니다.

$i = 0; 
foreach($sentenceCount as $sentenceLength){ 
    if($sentenceLength > 1){ 
     display_multiple_passage(); 
     break; 
    }else{ 
     $i++; 
    } 
} 
if($i == count($sentenceCount)){ 
    display_single_passage(); 
} 

이것은와 in_array 것은 일 경우 참 청소기 것 ... 비록 그것을해야 : S 또한

, 당신은 당신의 두 번째 코드 블록에 if() 블록의 당신의 들여 쓰기 문제를 해결하시기 바랍니다 수 있습니까?^__^

+0

정말 고마워요. =) 그'if()'블록이 틀린 것 같아 .. Duly 지적! :) – Fox

1

문자열 "/[^2-9]+/"은 결코 배열에 없습니다.

예 :

if (count(array_filter($passageArray, function($var) {return count($var) > 1;})) > 0) { 
    display_multiple_passage(); 
} else { 
    display_single_passage(); 
} 
+0

이것은 천재입니다. 익명의 기능을 가진 거대한 팬은 아니지만 분명히 제 것보다 훨씬 깨끗합니다. S – Viridis