Чтение онлайн

на главную - закладки

Жанры

Курс "Язык программирования 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 – м";

}

?>

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

PHP я изучила 3 – м

Очевидно, что эта функция более функциональна, чем 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>";

}

?>

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

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 )

Поделиться:
Популярные книги

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Монстр из прошлого тысячелетия

Еслер Андрей
5. Соприкосновение миров
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Монстр из прошлого тысячелетия

Санек 3

Седой Василий
3. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 3

Разведчик. Заброшенный в 43-й

Корчевский Юрий Григорьевич
Героическая фантастика
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.93
рейтинг книги
Разведчик. Заброшенный в 43-й

Бояръ-Аниме. Газлайтер. Том 35

Володин Григорий Григорьевич
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35

Бастард

Осадчук Алексей Витальевич
1. Последняя жизнь
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.86
рейтинг книги
Бастард

Законы Рода. Том 14

Андрей Мельник
14. Граф Берестьев
Фантастика:
аниме
фэнтези
эпическая фантастика
5.00
рейтинг книги
Законы Рода. Том 14

Петля, Кадетский корпус. Книга третья

Алексеев Евгений Артемович
3. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский корпус. Книга третья

Мастер 6

Чащин Валерий
6. Мастер
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 6

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Гримуар темного лорда VI

Грехов Тимофей
6. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VI

Точка Бифуркации VII

Смит Дейлор
7. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации VII

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Наследие Маозари 2

Панежин Евгений
2. Наследие Маозари
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Наследие Маозари 2