Сравнение массивов

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

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

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

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

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

code: #php
<?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\n";
}
?>

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

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

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

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

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

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

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

code: #php
<?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;  Значение:  гранат
Книга: PHP в примерах. Купить книгу
Автор: Стивен Хольцнер. Переводчик: С. Банников
Поделиться:

Похожие статьи: