2014-10-03 93 views
1

我想檢查一個數組是否沒有其他值比其他值,但in_array()沒有工作,所以我想它不能用in_array()完成;PHP檢查一個數組是否沒有其他數組比其他值

例如

<?php 
$arr1 = array(1,2,3,4,5,6); 
$arr2 = array(1,2,9); 
if(/*all values in $arr2 are in $arr1*/){ 
    /*return true*/ 
} 
else{ 
    /*return false*/ 
} 
/*this examle should return false*/ 
?> 

<?php 
$arr1 = array(1,2,3,4,5,6); 
$arr2 = array(1,2,6); 
if(/*all values in $arr2 are in $arr1*/){ 
    /*return true*/ 
} 
else{ 
    /*return false*/ 
} 
/*this examle should return true*/ 
?> 

我該怎麼辦呢?

+0

有數組功能這樣的失衡:array_merge,和array_diff,array_intersect,等... – 2014-10-03 18:05:35

回答

1

使用this

count($array) == count(array_intersect($array,$valid)); 

..或來不去想它。

$array == array_intersect($array,$valid); 

注意,這會產生true如果 (string)$elementtocheck=(string)$validelement,所以在本質上,只有 可用於標量。如果你的數組中有更復雜的值 (數組,對象),這將不起作用。爲了使工作中,我們改變它 位:

sort($array);//order matters for strict 
sort($valid); 
$array === array_intersect($valid,$array); 

... 假設,目前的順序並不重要/ sort()是 允許調用。

+0

我沒有更復雜的數據只是數字,多數民衆贊成爲什麼我發佈了這樣的例子。並感謝它的工作。 – 2014-10-03 18:15:29

-1

你試過

$arr1 == $arr2 

或者你可以使用一個功能

<?php 
function compareArrays(Array $a, Array $b){ 
    if(count($a) != count($b)){ 
    return false; 
    } 
    foreach($a as $value){ 
    if(!in_array($value, $b)){ 
     return false; 
    } 
    } 
    return true; 
} 
?> 

這只是一個例子,但你可以這樣來做。

0

可以使用array_intersect()功能:

if (array_intersect($arr1, $arr2) == $arr2) { 
    // $arr2 has only elements from $arr1 
} else { 
    // $arr2 has not only elements from $arr1 
} 
0

嘗試array_diff

public function checkSameContents($arr1, $arr2) { 
    $diff = array_diff($arr1, $arr2); // returns "unsame" elements in array 
    return count($diff) === 0; 
} 

如果陣列具有相同的內容,該函數將返回true,但假的,如果沒有。

希望這會有所幫助!

1

這是你正在尋找的條件:

if (count(array_diff($arr2, $arr1)) == 0) { 
+0

謝謝,我喜歡你的答案,但我已經接受了一個,當我看到你的。 – 2014-10-03 18:17:52

相關問題