|
Массивы
ADO в Delphi AJAX Android C++ CakePHP CMS COM CSS Delphi Flash Flex HTML Internet Java JavaScript MySQL PHP RIA SCORM Silverlight SQL UML XML Бази даних Веб-розробка Генетичні алгоритми ГІС Гітара Дизайн Економіка Інтелектуальні СДН Колір Масаж Математика Медицина Музика Нечітка логіка ООП Патерни Подання знань Розкрутка сайту, SEO САПР Сесії в PHP Системне програмування Системний аналіз Тестологія Тестування ПЗ Фреймворки Штучний інтелект
|
Массивы
МассивыВ одной из первых лекций мы рассказывали о том, как можно создать массив данных. Напомним, что массив можно создать двумя способами:
Например, нам нужно хранить список документов, которые будут удалены из базы данных. Естественно хранить его в виде массива, ключом в котором будет идентификатор документа (его уникальный номер), а значением – название документа. Этот массив можно создать таким образом: <?
$del_items = array("10"=>"Наука и жизнь",
"12"=>"Информатика");
$del_items["13"] = "Программирование на Php";
// добавляем элемент в массив
?>
Операции с массивамиМассив – это тип данных, с данными этого типа должны быть определены операции. Какие же операции можно производить с массивами? Массивы можно складывать и сравнивать. Складывают массивы с помощью стандартного оператора «+». Вообще говоря, эту операцию по отношению к массивам точнее назвать объединением. Если у нас есть два массива, $a и $b, то результатом их сложения (объединения) будет массив $c, состоящий из элементов $a, к которым справа дописаны элементы массива $b. Причем, если встречаются совпадающие ключи, то в результирующий массив включается элемент из первого массива, т.е. из $a. Таким образом, если складываются массивы в языке PHP, от перемены мест слагаемых сумма меняется. <?
$a = array("и"=>"Информатика",
"м"=>"Математика");
$b = array("и"=>"История","м"=>"Биология",
"ф"=>"Физика");
$c = $a + $b;
$d = $b +$a;
print_r($c);
/* получим: Array([и]=>Информатика
[м]=>Математика [ф]=>Физика) */
print_r($d);
/* получим: Array([и]=>История
[м]=>Биология [ф]=>Физика) */
?>
Пример 7.1. Сложение
массивовСравнивать массивы можно, проверяя их равенство или неравенство либо эквивалентность или неэквивалентность. Равенство массивов – это когда совпадают все пары ключ/значение элементов массивов. Эквивалентность – когда кроме равенства значений и ключей элементов требуется еще, чтобы элементы в обоих массивах были записаны в одном и том же порядке. Равенство значений в PHP обозначается символом «==», а эквивалентность – символом «===». <?
$a = array("и"=>"Информатика",
"м"=>"Математика");
$b = array("м"=>"Математика",
"и"=>"Информатика");
if ($a == $b) echo "Массивы равны и";
else echo "Массивы НЕ равны и ";
if ($a === $b) echo " эквивалентны";
else echo " НЕ эквивалентны";
// получим echo "Массивы равны и
НЕ эквивалентны"
?>
Пример 7.2. Сравнение
массивовДалее рассмотрим еще одну важную операцию с массивом – подсчет количества его элементов. Для ее реализации в PHP есть специальная функция. Функция countНе раз уже мы использовали функцию count(), чтобы вычислить количество элементов массива. На самом деле эта функция вычисляет число элементов в переменной вообще. Если применить ее к любой другой переменной, она возвратит 1. Исключение составляет переменная типа NULL – count(NULL) есть 0. Кроме того, применяя эту функцию к многомерному массиву, чтобы получить число его элементов, нужно использовать дополнительный параметр COUNT_RECURSIVE. <?
$del_items = array("langs" => array(
"10"=>"Pithon", "12"=>"Lisp"),
"other"=>"Информатика");
echo count($del_items) . "<br>";
// выведет 2
echo count($del_items,COUNT_RECURSIVE);
// выведет 4
?>
Пример 7.3. Применение
функции count()Мы не будем повторять все, что было сказано о массивах в предыдущих лекциях. В этой лекции мы рассмотрим некоторые встроенные функции для работы с массивами. И начнем мы с функций для поиска значений в массиве. Функция in_arrayin_array("искомое значение","массив",
["ограничение на тип"]);
позволяет установить, содержится ли в заданном массиве искомое значение. Если третий аргумент задан как true, то в массиве нужно найти элемент, совпадающий с искомым не только по значению, но и по типу. Если искомое значение – строка, то сравнение чувствительно к регистру. Например, имеется массив не изученных нами языков программирования. Мы хотим узнать, содержится ли в этом массиве язык PHP. Напишем следующую программу: <?php
$langs = array("Lisp","Pithon","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","Pithon","Java",
"PHP","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","Pithon","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 я изучила 3 – м Очевидно, что эта функция более функциональна, чем in_array, поскольку мы не только получаем информацию о том, что искомый элемент в массиве есть, но и узнаем, где именно в массиве он находится. А что будет, если искомых элементов в массиве несколько? В таком случае функция array_search() вернет ключ первого из найденных элементов. Чтобы получить ключи всех элементов, нужно воспользоваться функцией array_keys(). Функция array_keysФункция array_keys() выбирает все ключи массива. Но у нее имеется дополнительный аргумент, с помощью которого можно получить список ключей элементов с конкретным значением. Синтаксис этой функции таков: array_keys ("массив"
[,"значение для поиска"])
Функция array_keys() возвращает как строковые, так и числовые ключи массива, организуя все значения в виде нового массива с числовыми индексами. Пример 7.5. Мы записали массив языков, которые изучили. Список был длинным, и некоторые языки были записаны несколько раз. У нас возникло подозрение, что один из таких языков – Lisp. Давайте это проверим: <?php
$langs =
array("Lisp","Pithon","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","Pithon","Java",
"PHP","Perl","Lisp");
print_r(array_unique($langs));
?>
Получим следующее: Array ( [0] => Lisp [1] => Java [2]
=> Pithon [4] => PHP [5] => Perl )
Далее рассмотрим задачу сортировки массива.
Зверніть увагу на додаткові посиланняЯкщо вас цікавить...Головний розділСторінки, близькі за змістомзагрузка...
|
Теми розділу
Сторінки, близькі за змістом
|
|
Copyright © 2008—2026 Портал Знань.
При використанні матеріалів посилання, для інтернет-ресурсів — гіперпосилання, на Znannya.org обов'язкове.
Зв'язок
|
НТУУ "КПІ" Інженерія програмного забезпечення КПІ Лабораторія СЕТ |
|