#3.14 php Сравнение массивов

В РНР имеются средства для сравнения массивов и нахождения различий в их элементах. Допустим, имеются два массива, в которых совпадает только второй элемент. Для построения массива, в который будут входить только те элементы первого массива, которые отсутствуют во втором, используется функция array_diff().

<?php
$local_fruits = array ("яблоко", "гранат", "абрикос");
$tropical_fruits = array ("ананас", "гранат", "папайя");
$difference = array_diff ($local_fruits, $tropical_fruits);
foreach ($difference as $key => $value)
{
    echo "Индекс: $key; Значение: $value<BR>";
}
?>

В результате выполнения этого примера будут выведены строки:

Индекс: 0; Значение: яблоко 
Индекс: 2; Значение: абрикос

В данном случае сравнивались только значения элементов массива. Если же нужно анализировать еще и индексы, на помощь приходит функция array_diff_assoc() (ее название объясняется тем, что массивы со строковыми индексами называются также ассоциативными массивами):

<?php
$local_fruits = array ("фрукт1" => "яблоко", "фрукт2" => 
"гранат", "фруктЗ" => "абрикос");
$tropical_fruits = array ("фрукт_1" => "ананас", "фрукт_2" =>
"гранат", "фрукт_3" => "папайя");
$difference = array_diff_assoc ($local_fruits,
$tropical_fruits);
foreach ($difference as $key => $value)
{
    echo "Индекс: $key; Значение: $value<BR>";
}
?>

В результате будут выведены строки (следует обратить внимание на то, что полностью совпадающих как по значению, так и по индексу элементов в двух массивах не найдено):

Индекс: фрукт1; Значение: яблоко
Индекс: фрукт2; Значение: гранат
Индекс:' фруктЗ; Значение: абрикос

Встречается и обратная задача — найти элементы, которые являются общими для двух массивов. В этом случае используется функция array_intersect():

<?php
$local_fruits = array ("яблоко", "гранат", "абрикос");
$tropical_fruits = array ("ананас", "гранат", "папайя");
$difference = array_intersect ($local_fruits, $tropical_fruits);
foreach($difference as $key => $value)
{
    echo "Индекс: $key; Значение: $value<BR>";
}
?>

В результате будет выведена единственная строчка:

Индекс-1; Значение: гранат

Если же требуется учесть и индексы при определении общих элементов, используется функция array_intersect_assoc():

<?php
$local_fruits = array ("фрукт1" => "яблоко", "фрукт2" => 
"гранат", "фруктЗ" => "абрикос");
$tropical_fruits = array ("фрукт" => "яблоко", "фрукт2" =>
"гранат", "фруктЗ" => "папайя");
$difference = array_intersect_assoc ($local_fruits,
$tropical_fruits);
foreach ($difference as $key => $value)
{
echo "Индекс: $key; Значение: $value\n";
}
?>

Результатом выполнения этого примера будет также одна строка (следует обратить внимание, что первые элементы массивов равны по значениям, но не по индексам):

Индекс:фрукт2; Значение: гранат

Key Words for FKN + antitotal forum (CS VSU):