Есть два массива, из которых $array1 эталонный:
$array1 = array('green' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);'
$array2 = array('green' => 5, 'red' => 6, 'yellow' => 7, 'purple' => 8);
//Как мы видим третий ключ 'yellow
во втором массиве $array2 не совпадает с последовательностью ключей в первом эталонном массиве.
Задача: как, сравнивая два массива, выявить расхождение в местоположении ключей?
(так же принимаем условие, что нам совершенно не важны значения в данных массивах)
Я попробовал так:
function key_compare_func($key1, $key2)
{
if ($key1 == $key2)
echo "ключ ".$key2." в массиве array2 находится на месте <br>";
else
echo "ключ ".$key2." в массиве array2 находится НЕ на месте <br>";
}
array_diff_ukey($array1, $array2, 'key_compare_func');
но что то у меня не «вытанцовывается» :)
буду признателен за помощь........
Спустя 8 минут, 34 секунды (9.08.2012 - 19:29) SergSerg написал(а):
выше показанный код выдает результат:
ключ green в массиве array2 находится НЕ на месте
ключ red в массиве array2 находится НЕ на месте
ключ green в массиве array2 находится НЕ на месте
ключ red в массиве array2 находится НЕ на месте
ключ red в массиве array2 находится НЕ на месте
ключ yellow в массиве array2 находится НЕ на месте
ключ purple в массиве array2 находится на месте
ключ purple в массиве array2 находится НЕ на месте
ключ purple в массиве array2 находится НЕ на месте
ключ green в массиве array2 находится НЕ на месте
ключ red в массиве array2 находится НЕ на месте
ключ green в массиве array2 находится НЕ на месте
ключ red в массиве array2 находится НЕ на месте
ключ red в массиве array2 находится НЕ на месте
ключ yellow в массиве array2 находится НЕ на месте
ключ purple в массиве array2 находится на месте
ключ purple в массиве array2 находится НЕ на месте
ключ purple в массиве array2 находится НЕ на месте
Спустя 23 минуты, 4 секунды (9.08.2012 - 19:52) pak написал(а):
var_dump(array_intersect_key($array1, $array2));
Покажет только совпадение.
Спустя 7 минут, 33 секунды (9.08.2012 - 20:00) SergSerg написал(а):
Цитата (pak @ 9.08.2012 - 17:52) |
var_dump(array_intersect_key($array1, $array2)); Покажет только совпадение. |
спасибо!!!
Спустя 4 минуты, 6 секунд (9.08.2012 - 20:04) SergSerg написал(а):
Цитата (pak @ 9.08.2012 - 17:52) |
var_dump(array_intersect_key($array1, $array2)); Покажет только совпадение. |
а как сделать, что бы сообщение выдавалось, примерно такое:
ВНИМАНИЕ: ключ $key находится НЕ на месте!
Спустя 1 час, 7 минут, 52 секунды (9.08.2012 - 21:12) SergSerg написал(а):
в общем у меня получилось следующее:
$array1 = array('green' => 1, 'red' => 2, 'yellow' => 3, 'purple' => 4,);
$array2 = array('green' => 5, 'yellow' => 7, 'red' => 6, 'purple' => 8,);
function compare_array_data($a1, $a2) {
reset($a1); // установили внутренний указатель массива на его первый элемент
reset($a2); // установили внутренний указатель массива на его первый элемент
// each - Возвратить текущую пару ключ/значение из массива и сместить его указатель
while( ( $e1=each($a1) ) && ( $e2=each($a2) ) ) {
if ( $e1["key"] !== $e2["key"] ) {
return $e2["key"];
}
}
return true;
}
$result = compare_array_data($array1, $array2);
if($result === true)
{
// массивы идентичны
echo 'последовательность ключей в массивах идентична';
}
else
{
// в массивах есть расхождение
echo 'в последовательности ключей в массивах обнаружено расхождение!<br>';
echo '!!!ВНИМАНИЕ: '.$result.' - этот ключ не на своем месте!';
}