Здравствуйте! Записался на ваш курс, но не понимаю как произвести оплату. Надо ли писать заявление и, если да, то куда отправлять? как я получу диплом о профессиональной переподготовке? |
Работа с массивами данных
Функция in_array
in_array("искомое значение","массив", ["ограничение на тип"]);
позволяет установить, содержится ли в заданном массиве искомое значение. Если третий аргумент задан как true, то в массиве нужно найти элемент, совпадающий с искомым не только по значению, но и по типу. Если искомое значение – строка, то сравнение чувствительно к регистру.
Например, имеется массив неизученных нами языков программирования. Мы хотим узнать, содержится ли в этом массиве язык PHP. Напишем следующую программу:
<?php $langs = array("Lisp","Python","Java", "PHP","Perl"); if (in_array("PHP",$langs,true)) 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()
В результате мы получим строчку:
PHP я изучила 4-м
Очевидно, что эта функция более функциональна, чем 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()
В результате получим:
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 [3] => PHP [4] => Perl )