2014-10-03 90 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

相关问题