Сравнение массивов
В РНР имеются средства для сравнения массивов и нахождения различий в их элементах. Допустим, имеются два массива, в которых совпадает только второй элемент. Для построения массива, в который будут входить только те элементы первого массива, которые отсутствуют во втором, используется функция array_diff.
<?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 (ее название объясняется тем, что массивы со строковыми индексами называются также ассоциативными массивами):
<?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:
<?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:
<?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; Значение: гранат
Автор: Стивен Хольцнер. Переводчик: С. Банников