2009-12-16 75 views
0

我有一個if語句需要檢查是否存在一系列的項目以及是否存在任何其他項目。如果語句問題在php

因此,例如

foreach($id_cart as $id) { 
if(($id == 4 || $id == 5) && **IF ANY OTHER ITEM EXISTS**){ 
    echo "Yes"; 
} 

是否有這樣做的一個簡單的方法? 項目存在或不存在。 $ id_cart會有,比方說,ID:4,5,6,8,12,14 沒有其他東西存儲。因此,如果4或5都在那裏,再加上其他任何數量的...

+1

我們必須知道如何將項目定義爲「現有」。 – ryeguy 2009-12-16 19:52:36

回答

4

如果您的問題是要求 「我有一個ID列表,我想知道它是否在那裏,除此之外,如果存在其他項目」,則一個操作過程可能如下:

  • ,如果你尋找存在的項目,從數組中取出,並檢查它是否仍然有任何成員
    • if count(array) is > 0 do this; else do that;
  • 否則是不存在或者是「阿龍E」。

這個過程是非常優化的:例如,你的原始數組在每次迭代時都會失去成員。如果您不關心數組中包含哪些成員,則只需執行count(array) - 1即可。

也許這你想要做什麼:

foreach ($id_cart as $id) { 
    if (($id == 4 || $id == 5) && count(array_diff($id_cart, array(4, 5)))) { 
     // do something 
    } 
} 

,或者更好:

if ((in_array(4, $id_cart) || in_array(5, $id_cart)) && count(array_diff($id_cart, array(4, 5)))) { 
    // four or five exists, while other elements are also in the array 
    // do something 
} 
+0

最後一批代碼很好。 – 2009-12-16 20:41:32

1

這將查找不4或5

$others = array_diff($id_cart, array(4, 5)); 

這將查找其鍵不是4或5

項目
$others = array_diff_key($id_cart, array_flip(array(4, 5))); 
0

一個有效的方法是將ID存儲在數組的鍵中並使用isset()檢查它們的存在。

PHP的數組是字典。 利用此功能,而不是浪費時間in_array()。

+0

參見http://php.net/array_flip – 2009-12-16 20:33:09

4
<?php 

$a = array(4, 5); 
if (array_intersect($id_cart, $a) && array_diff($id_cart, $a)) 
{ 
    echo "Yes\n"; 
} else { 
    echo "No\n"; 
} 

測試:

  • 4,5:沒有
  • 4, 6:是的
  • 5,6:是
  • 6,8:沒有
  • 4,5,6,8,12,14:是

array_intersect()array_diff()

array(4,5)相交測試是否存在4或5,因爲如果$id_cart中沒有出現任何值,結果將爲空。

Diff與array(4,5)測試除了4和5之外是否存在另一個值,因爲如果在$id_cart中沒有發生值但是4或5的結果,則結果將爲空。使用count()來測試非空數組是不必要的。在一個條件下,一個空數組的計算結果爲false


Re Adriano關於簡單性或效率的評論:這樣PHP很棘手。有些功能比其他人更有效,所以很難說2函數調用優於3.我試圖同時運行我的解決方案和阿德里亞諾的,並使用microtime()測量經過時間:

  • 比爾的解決方案:6.25秒100000迭代
  • 阿德里亞諾的解決方案:5.59秒100000次迭代

因此,他們不相等,但阿德里亞諾的只有10.5%的速度。足夠接近,我會選擇一個可讀性而不是性能的解決方案。如果最佳性能是最高優先級,那麼首先不會使用PHP。 :-)

FWIW,使用foreach的Adriano的其他解決方案花了7.13秒100000次迭代。

+0

兩個函數調用,而不是(可能)3在我的情況,好。代碼仍然是自我記錄。雖然我會創建一個變量來表示數組(4,5)。 – 2009-12-16 22:29:40

+0

使用數組變量的良好調用。它在我的測試中確實加快了兩種解決方案的速度。我會在上面編輯我的帖子。 – 2009-12-16 23:07:52