2016-11-11 151 views
0

我想檢查array_intersect作爲常規數組的結果,但即使數組爲空也總是返回true。如何檢查array_intersect的結果是否爲空?

 $lecturedayssplit1 = preg_split("/(?=[A-Z])/", "TF"); 
     $lecturedayssplit2 = preg_split("/(?=[A-Z])/", "MTh"); 
     $lectolec=array_intersect($lecturedayssplit1,$lecturedayssplit2); 
     if (count($lectolec) > 0) { 
      echo "Yeah!!!"; 
      print_r($lectolec); 
     } else { 
      echo "Nooo!"; 
      print_r($lectolec); 
     } 

在問題$lectolec不應該返回的計數大於0,因爲在兩個陣列之間沒有交集。我也試過if (empty($lectolec))但它也沒有工作。希望有人可以幫忙。提前致謝!

回答

0

由於使用的是「零寬度正期待」 (?=[A-Z])正則表達式,它是匹配中的每個的開始處的空序列的至少一個計數測試。因此,array_intersect與兩者中的空序列相匹配。

您可以使用標誌PREG_SPLIT_NO_EMPTY來忽略那些空的結果。

$lecturedayssplit1 = preg_split("/(?=[A-Z])/", "TF", -1, PREG_SPLIT_NO_EMPTY); 
$lecturedayssplit2 = preg_split("/(?=[A-Z])/", "MTh", -1, PREG_SPLIT_NO_EMPTY); 
+0

你好,謝謝你會試試這個。 -1代表什麼? –

+0

'-1'表示最大結果數量沒有限制。 – Simon

0

沒關係傢伙,我明白了。我改變了條件,以if (count($lectolec) > 1),因爲它總是具有即使數組爲空

+1

對不起,這是廢話!如果一個數組是空的,那麼'count(array)'是'0'。 – arkascha

+0

是啊,哈哈顯然,對此感到遺憾。西蒙指出,確實有一個交叉點,我不知道 –