Сравнение значений массива

White Rabbit

белый кролик
Сравнение значений массива

Всем добрый день.

Есть задача:

Дано три массива:

PHP:
$array1 = array(
		"param1"=>1,
		"param2"=>2,
		"param3"=>3,
			);
				
$array2 = array(
		"param1"=>10,
		"param2"=>2,
		"param3"=>3
			);
				
$required = array(
		"param3","param2"
			);
Нужно сравнить значения в первых двух массивов, имена ключей которых содержатся в третьем массиве,
и, если ВСЕ перечисленные в $required значения равны, выдать TRUE.

По этому поводу родилась функция:
PHP:
function compare($array1, $array2, $required)
{
    $valid_count = 0;
    $required_count = 0;
    foreach($required as $v){
    	if(isset($array1[$v]) && isset($array2[$v])
            && $array1[$v]==$array2[$v]) {
    	    $valid_count++;
    	}
    	$required_count++;
    } 
    if($required_count == $valid_count) return true;
    return false; 
}
Хочу с вами посоветоваться.
Может,кто подскажет более красивый алгоритм, без ручного перебора $required.
 

Фанат

oncle terrible
Команда форума
какая разница, ручной будет перебор или автоматический?
как эот этого изменится красота АЛГОРИТМА?
 

White Rabbit

белый кролик
Ну, дело скорее не в красоте.
Просто теоретически $required может быть весьма увесистым.
Я полазил по php.net на предмет функций для работы с массивами,
но что-то ничего в голову не пришло.
 

White Rabbit

белый кролик
Отражается на времени перебора.
...
Хотя, в общем-то, не критично...

Ладно.
Сорри.
Можно тему удалить.
 

Фанат

oncle terrible
Команда форума
то есть, ты считаешь, что встроенная функция перебирать массив не будет, а телепатическим путём узнает его содержмое.
я тебя правильно понял?
 

White Rabbit

белый кролик
Просто, есть субъективное ощущение, что когда массив перебирается встроенной функцией,
это происходит несколько быстрее.
 

Wicked

Новичок
У меня получилось как-то так :)
PHP:
function compare($array1, $array2, $required) {
  return array_intersect_key($array1, array_flip($required)) == array_intersect_key($array2, array_flip($required));
}
 
Сверху