Функция in_array
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>";
?>
Функция array_searchЭто еще одна функция для поиска значения в массиве. В отличие от in_array в результате работы array_search возвращает значение ключа, если элемент найден, и ложь – в противном случае. А вот синтаксис у этих функций одинаковый:
array_search("искомое значение","массив",
["ограничение на тип"]);
Сравнение строк чувствительно к регистру, а если указан опциональный аргумент, то сравниваются еще и типы значений. До PHP 4.2.0, если искомое значение не было найдено, эта функция возвращала ошибку или пустое значение NULL. Пример 7.4. Теперь, наоборот, пусть у нас есть массив языков программирования, которые мы знаем. Причем ключом каждого элемента является номер, указывающий, каким по счету был изучен этот язык.
<?php
$langs = array("Lisp","Python","Java",
"PHP","Perl");
if (!array_search("PHP",$langs))
echo "Надо бы изучить PHP<br>";
else {
$k = array_search("PHP",$langs);
echo "PHP я изучила $k – м";
}
?>
Пример
7.4.
Применение функции array_search()
(html,
txt)
В результате мы получим строчку: Очевидно, что эта функция более функциональна, чем in_array, поскольку мы не только получаем информацию о том, что искомый элемент в массиве есть, но и узнаем, где именно в массиве он находится. А что будет, если искомых элементов в массиве несколько? В таком случае функция array_search() вернет ключ первого из найденных элементов. Чтобы получить ключи всех элементов, нужно воспользоваться функцией array_keys(). Функция array_keysФункция array_keys() выбирает все ключи массива. Но у нее имеется дополнительный аргумент, с помощью которого можно получить список ключей элементов с конкретным значением. Синтаксис этой функции таков:
array_keys ("массив"
[,"значение для поиска"])
Функция array_keys() возвращает как строковые, так и числовые ключи массива, организуя все значения в виде нового массива с числовыми индексами. Пример 7.5. Мы записали массив языков, которые изучили. Список был длинным, и некоторые языки были записаны несколько раз. У нас возникло подозрение, что один из таких языков – Lisp. Давайте это проверим:
<?php
$langs =
array("Lisp","Python","Java","PHP",
"Perl","Lisp");
$lisp_keys = array_keys($langs,"Lisp");
echo "Lisp входит в массив ".
count($lisp_keys) ." раза:<br>";
foreach ($lisp_keys as $val){
echo "под номером $val <br>";
}
?>
Пример
7.5.
Применение функции array_keys()
(html,
txt)
В результате получим:
Lisp входит в массив 2 раза:
под номером 0
под номером 5
Функция array_keys(), как и две предыдущие, зависит от регистра, т.е. элементов LISP в массиве она не обнаружит. array_keys() появилась только в PHP4. В PHP3 для реализации ее функциональности нужно придумывать свою функцию. Если есть функция для получения всех ключей массива, то можно предположить, что существует и функция для получения всех значений массива. Действительно, она существует. Это функция array_values(массив). Все значения переданного ей массива записываются в новый массив, проиндексированный целыми числами, т.е. все ключи массива теряются, остаются только значения. Но вернемся к нашему примеру. Итак, мы выяснили, что язык Lisp случайно упомянут в нашем массиве дважды. Поскольку изучить один язык дважды нельзя («учил, но забыл» не считается), то нужно как-то избавиться от повторяющихся языков. Сделать это довольно просто с помощью функции array_unique(). Функция array_uniqueФункция array_unique(массив) удаляет повторяющиеся значения из массива и возвращает новый массив. Таким образом, вместо нескольких одинаковых значений и их ключей мы имеем одно значение. Какой у него будет ключ? Как из нескольких ключей одинаковых элементов выбирается тот, который будет сохранен в новом массиве? Происходит следующее. Все элементы массива преобразуются в строки и сортируются. Затем обработчик запоминает первый ключ для каждого значения, а остальные ключи игнорирует. Попробуем избавиться от повторяющихся языков в списке изученных.
<?php
$langs =
array("Lisp","Java","Python","Java",
"PHP","Perl","Lisp");
print_r(array_unique($langs));
?>
Получим следующее:
Array ( [0] => Lisp [1] => Java [2]
=> Python [4] => PHP [5] => Perl )
Далее рассмотрим задачу сортировки массива.
|