Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сети эвм / Язык PHP.doc
Скачиваний:
84
Добавлен:
17.03.2015
Размер:
2.29 Mб
Скачать

Функция 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)

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

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>";

}

?>

Пример 7.5. Применение функции array_keys() (html, txt)

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

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

под номером 0

под номером 5

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

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

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

Соседние файлы в папке сети эвм