2013-12-19 50 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