2011-02-09 2 views
2

Если это $array_bли array_a содержат все элементы array_b

$array_b = array('red', 'green', 'blue'); 

Что эффективный способ, чтобы сравнить его с $array_a и получить логическое значение, чтобы $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 (false) на значение true. –

+1

'count (array_diff ($ array_b, $ array_a)) == 0' это условная операция, возвращающая boolean. Зачем делать это явным? – 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

Смежные вопросы