Сравнивать массивы можно, проверяя их равенство или неравенство либо эквивалентность или неэквивалентность. Равенство массивов – это когда совпадают все пары ключ/значение элементов массивов. Эквивалентность – когда кроме равенства значений и ключей элементов требуется еще, чтобы элементы в обоих массивах были записаны в одном и том же порядке. Равенство значений в PHP обозначается символом «==», а эквивалентность – символом «===».
<?
$a = array('и'=>'Информатика',
'м'=>'Математика');
$b = array('м'=>'Математика',
'и'=>'Информатика');
if ($a == $b) echo 'Массивы равны и';
else echo 'Массивы НЕ равны и ';
if ($a === $b) echo ' эквивалентны';
else echo ' НЕ эквивалентны';
// получим echo 'Массивы равны и
НЕ эквивалентны'
?>
Далее рассмотрим еще одну важную операцию с массивом – подсчет количества его элементов. Для ее реализации в PHP есть специальная функция.
Не раз уже мы использовали функцию count(), чтобы вычислить количество элементов массива. На самом деле эта функция вычисляет число элементов в переменной вообще. Если применить ее к любой другой переменной, она возвратит 1. Исключение составляет переменная типа NULL – count(NULL) есть 0. Кроме того, применяя эту функцию к многомерному массиву, чтобы получить число его элементов, нужно использовать дополнительный параметр COUNT_RECURSIVE.
<?
$del_items = array('langs' => array(
'10'=>'Python', '12'=>'Lisp'),
'other'=>'Информатика');
echo count($del_items) . '<br>';
// выведет 2
echo count($del_items,COUNT_RECURSIVE);
// выведет 4
?>
Мы не будем повторять все, что было сказано о массивах в предыдущих лекциях. В этой лекции мы рассмотрим некоторые встроенные функции для работы с массивами. И начнем мы с функций для поиска значений в массиве.
in_array('искомое значение','массив',
['ограничение на тип']);
позволяет установить, содержится ли в заданном массиве искомое значение. Если третий аргумент задан как true, то в массиве нужно найти элемент, совпадающий с искомым не только по значению, но и по типу. Если искомое значение – строка, то сравнение чувствительно к регистру.
Например, имеется массив не изученных нами языков программирования. Мы хотим узнать, содержится ли в этом массиве язык PHP. Напишем следующую программу:
<?php
$langs = array('Lisp','Python','Java',
'PHP','Perl');
if (in_array('PHP',$langs))
echo 'Надо бы изучить PHP<br>';
// выведет сообщение 'Надо бы изучить PHP'
if (in_array('php',$langs))
echo 'Надо бы изучить php<br>';
// ничего не выведет, поскольку в массиве
// есть строка 'PHP', а не 'php'
?>
В качестве искомого значения этой функции может выступать и массив. Правда, это свойство было добавлено только начиная с PHP 4.2.0.
Например:
<?php
$langs = array('Lisp','Python',array('PHP','Java'),'Perl');
if (in_array(array('PHP','Java'),$langs))
echo 'Надо бы изучить PHP и Java<br>';
?>
Это еще одна функция для поиска значения в массиве. В отличие от in_array в результате работы array_search возвращает значение ключа, если элемент найден, и ложь – в противном случае. А вот синтаксис у этих функций одинаковый:
array_search('искомое значение','массив',
['ограничение на тип']);
Сравнение строк чувствительно к регистру, а если указан опциональный аргумент, то сравниваются еще и типы значений. До PHP 4.2.0, если искомое значение не было найдено, эта функция возвращала ошибку или пустое значение NULL.
Пример 7.4. Теперь, наоборот, пусть у нас есть массив языков программирования, которые мы знаем. Причем ключом каждого элемента является номер, указывающий, каким по счету был изучен этот язык.