2011-02-09 15 views
2

のすべての要素が含まれています。はARRAY_Aはarray_b

これは私が

//false, because it's missing the red from `$array_b` 
$array_a = array('green', 'blue'); 

//true, because it contains all 3 from `$array_b` 
$array_a = array('red', 'green', 'blue');  

//true, because it contains all 3 from `$array_b` 
//even though there's an extra orange and cyan 
$array_a = array('red', 'green', 'blue', 'orange', 'cyan'); 

を追跡するのは難しいです嫌なネストされたループせずにこれを行うには良い方法は何を取得しようとしている出力?

答えて

4
if (count(array_intersect($array_a, $array_b)) == count($array_b)) { 
    ... 
} 

又は関数として

function function_name($array_a, $array_b) { 
    return count(array_intersect($array_a, $array_b)) == count($array_b); 
} 
+0

「count(array_intersect($ array_a、$ array_b))== count($ array_a)」ではないのですか? –

+0

いいえ、私はこのバージョンが望ましい出力を与えると思います。与えられた例にそれを適用してみてください。 – Hammerite

2
$boolean = count(array_diff($array_b, $array_a)) == 0 ? true : false; 
+0

'count(array_diff($ array_b、$ array_a))== 0? true:false; 'なぜ三項演算子ですか? – AlexanderMP

+0

なぜですか?それは、0(偽)を反転させることを明らかにすることです。 –

+1

'count(array_diff($ array_b、$ array_a))== 0'それはブール値を返す条件付き演算です。なぜそれを明示するのですか? – AlexanderMP

0

empty()count()よりも高速で、かつ差分が交差よりも高速です。

$diff=array_diff($array_a, $array_b); 
if(empty($diff)) 
{ 
    ... 
} 
+0

'empty()'は変数のみで動作する言語構造体です。それは動作しません(解析エラー)。 – ircmaxell

+0

はい、あなたは正しいです。それを忘れてしまった。 http://php.net/manual/en/function.empty.php – AlexanderMP