Язык программирования PHP | страница 62



> [,"значение для поиска"])


Функция array_keys() возвращает как строковые, так и числовые ключи массива, организуя все значения в виде нового массива с числовыми индексами.


Пример 7.5. Мы записали массив языков, которые изучили. Список был длинным, и некоторые языки были записаны несколько раз. У нас возникло подозрение, что один из таких языков – Lisp. Давайте это проверим:


>

>$langs =

>array("Lisp","Python","Java","PHP",

> "Perl","Lisp");

>$lisp_keys = array_keys($langs,"Lisp");

>echo "Lisp входит в массив ".

> count($lisp_keys) ." раза:
";

>foreach ($lisp_keys as $val){

> echo "под номером $val
";

>}

>?>



В результате получим:


>Lisp входит в массив 2 раза:

>под номером 0

>под номером 5



Функция array_keys(), как и две предыдущие, зависит от регистра, т.е. элементов LISP в массиве она не обнаружит. array_keys() появилась только в PHP4. В PHP3 для реализации ее функциональности нужно придумывать свою функцию.


Если есть функция для получения всех ключей массива, то можно предположить, что существует и функция для получения всех значений массива. Действительно, она существует. Это функция array_values(массив). Все значения переданного ей массива записываются в новый массив, проиндексированный целыми числами, т.е. все ключи массива теряются, остаются только значения. Но вернемся к нашему примеру.


Итак, мы выяснили, что язык Lisp случайно упомянут в нашем массиве дважды. Поскольку изучить один язык дважды нельзя («учил, но забыл» не считается), то нужно как-то избавиться от повторяющихся языков. Сделать это довольно просто с помощью функции array_unique().


Функция array_unique


Функция array_unique(массив) удаляет повторяющиеся значения из массива и возвращает новый массив. Таким образом, вместо нескольких одинаковых значений и их ключей мы имеем одно значение. Какой у него будет ключ? Как из нескольких ключей одинаковых элементов выбирается тот, который будет сохранен в новом массиве? Происходит следующее. Все элементы массива преобразуются в строки и сортируются. Затем обработчик запоминает первый ключ для каждого значения, а остальные ключи игнорирует.


Попробуем избавиться от повторяющихся языков в списке изученных.


>

>$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 )



Далее рассмотрим задачу сортировки массива.


Сортировка массивов