2014-03-27 64 views
1

我想用一個主數組來比較具有索引的子數組。我試過使用array_diffarray_intersect_key等,但無法找到繼續的方式,除了使用一個愚蠢的for循環和做一些老派的方法。在PHP中的子陣列比較

好的,讓我澄清一下我的問題。比方說,我有兩個陣列:

Array 
(
    [0] => H 
    [1] => e 
    [2] => l 
    [3] => l 
    [4] => o 
    [5] => W 
    [6] => o 
    [7] => r 
    [8] => l 
    [9] => d 
    [10] => ! 
) 

Array 
(
    [1] => e 
    [5] => W 
    [7] => r 
    [10] => ! 
) 

第一個是滿弦的主陣列:HelloWorld!,第二個是子陣列,其具有一些選定索引和它的值,由用戶給出。這也可能是錯誤的,因爲如:

Array 
(
    [1] => F 
    [5] => a 
    [7] => 6 
    [10] => t 
) 

現在,當我通過第一陣列,它顯然應該返回true和下一個應該返回false。這可能與使用PHP的內置函數?提前致謝。

回答

1

您應該使用array_intersect_assoc(),如果你還想檢查密鑰匹配

if (array_intersect_assoc ($a,$b)==$b) {} else {} 

因爲$ a是全陣列和$ b子集來測試對。

+0

哇!這工作! :D –

+0

讓我們注意''array_diff_assoc($ b,$ a)'以相對簡單的方式執行相同的操作... – deceze

0
if (array_diff_assoc($array2, $array1)) { 
    echo 'array 2 is not an exact subset of array 1'; 
} 

array_diff_assoc返回從$array2其不在$array1所有元素。因此,如果數組2是數組1的子集,則返回值爲空數組,計算結果爲false,否則爲非空數組,計算結果爲true

0

我覺得array_intersect_uassoc()是你正在尋找的功能。它根據鍵和值進行比較。這裏有一個簡單的例子:

$array1 = array(0 => 'h', 1 => 'e', 2 => 'l', 3 => 'o'); 
$array2 = array(0 => 'h', 1 => 'e'); 
$array3 = array(0 => 'h', 1 => 'z'); 
var_dump(array_intersect_uassoc($array1, $array2, 'strcasecmp')); 
var_dump(array_intersect_uassoc($array1, $array3, 'strcasecmp')); 

輸出:

array(2) { 
    [0]=> 
    string(1) "h" 
    [1]=> 
    string(1) "e" 
} 
array(1) { 
    [0]=> 
    string(1) "h" 
} 

然後比較返回數組的大小第二數組的大小 - 如果他們是平等的,所有的比賽都是對的。如果返回的數組較小 - 第二個數組中存在錯誤。

有回調替換strcasecmp()根據自己的喜好和利潤:)

乾杯

0
$array3 = array_diff($array2,$array1); //array2 is checking either present or not in array1 

,並檢查ARRAY3是空的。如果array3是空的,則匹配,如果不是空的,則不匹配。

+0

這不會檢查索引! –