2010-02-21 75 views
38

我有2個陣列,該值將從數據庫加載,下面是一個例子:如果針是一個數組,我該如何使用in_array?

$arr1 = array(1,2,3); 
$arr2 = array(1,2,3,4,5,6,7); 

我想要做的是檢查是否所有的值$arr1$arr2存在。上面的例子應該是一個TRUE同時:

$arr3 = array(1,2,4,5,6,7); 

比較$arr1$arr3將返回FALSE

通常我使用in_array,因爲我只需要檢查單個值到數組中。但在這種情況下,不能使用in_array。我想看看是否有一個簡單的方法來執行最小循環檢查。

UPDATE澄清。

第一個數組將是一個包含唯一值的集合。第二個數組可以包含重複值。它們在處理之前都保證有一個數組。

+0

值得澄清的是:你在尋找正常的「set」語義嗎?如果第二個數組是數組(1,2,4,3),你會得到什麼結果?如果第一個是數組(1,1,1,1)會怎麼樣?或者他們是非法的? – Oddthinking 2010-02-21 01:44:28

回答

58

使用array_diff()

$arr1 = array(1,2,3); 
$arr2 = array(1,2,3,4,5,6,7); 
$arr3 = array_diff($arr1, $arr2); 
if (count($arr3) == 0) { 
    // all of $arr1 is in $arr2 
} 
+0

+1我指向'array_diff()'函數並舉例說明。 – 2010-02-21 06:08:55

5

您可以嘗試使用array_diff()函數來查找兩個數組之間的差異,這可能對您有所幫助。我想澄清你的意思,第一個數組中的所有值都必須在第二個數組中,而不是相反。

+0

是的山姆。所有'$ arr1'值必須出現在第二個數組中,才能得到'TRUE'條件,否則'FALSE'。我會看看'array_diff()'。謝謝 – 2010-02-21 06:07:07

27

您可以使用array_intersectarray_diff

$arr1 = array(1,2,3); 
$arr2 = array(1,2,3,4,5,6,7); 

if ($arr1 == array_intersect($arr1, $arr2)) { 
    // All elements of arr1 are in arr2 
} 

然而,如果你不需要使用交集的結果(這似乎是你的情況),使用array_diff更節省空間和時間:

$arr1 = array(1,2,3); 
$arr2 = array(1,2,3,4,5,6,7); 
$diff = array_diff($arr1, $arr2); 

if (empty($diff)) { 
    // All elements of arr1 are in arr2 
} 
+0

用於指向'array_intersect()'函數並給出用法示例。 – 2010-02-21 06:10:23

0

在我的特殊情況下,我需要檢查一對id是否在之前處理過。那麼簡單的array_diff()不適合我。

相反,我從生成的字母順序排序IDS鍵與in_array使用它們:

<?php 
$pairs = array(); 
// ... 
$pair = array($currentId, $id); 
sort($pair); 
$pair = implode('-', $pair); 
if (in_array($pair, $pairs)) { 
    continue; 
} 
$pairs[$pair] = $pair; 

這可能不是在所有的最佳解決方案,但我只需要它骯髒的腳本執行一次。

相關問題