2013-12-19 75 views
0

我有一個多維數組,我想檢查一個數組鍵是否包含多個值,所以我用count來計算每個數組鍵的所有值並將其放入一個單獨的數組中,並且我得到:in_array有問題

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

現在,我的問題是我需要對其進行過濾,這樣我就可以做一個條件,如果數組返回兩個以上的值,或只是一個值,就像如果:

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

我到目前爲止有此代碼,但它總是繼續我的功能display_single_passage()。我相信我的問題是in_array內,但我似乎無法弄清楚如何檢查,如果你想找一個人數超過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

我不能完全肯定,如果你真正尋找的正則表達式在數組中,或者實際的字符串"/[^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()'block肯定看起來不合適。 :) – 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