- •Тема 1 Основы cgi-программирования
- •1.1 Методы передачи данных
- •1.2 Передача документа пользователю
- •1.3 Передача информации cgi-сценарию
- •Тема 2 Характеристика языка php
- •2.1 Принцип работы php
- •2.2 Переменные, константы, выражения
- •Тема 3 Работа с данными формы
- •3.1 Передача данных
- •3.2 Трансляция полей формы в переменные
- •Тема 4 Конструкции языка
- •4.1 Условные инструкции
- •4.2 Инструкции циклов
- •4.3 Инструкции включения
- •Тема 5 Ассоциативные массивы
- •5.1 Списки и ассоциативные массивы
- •5.2 Операции над массивами
- •5.3 Списки и строки
- •5.4 Сериализация
- •Тема 6 Работа с массивами
- •6.1 Сортировка массивов
- •6.2 Функции для работы с массивами
- •Тема 7 Функции и области видимости
- •7.1 Формат определения функции, передача параметров
- •7.2 Глобальные, локальные, статические переменные
- •7.3 Рекурсия, вложенные и условно-определяемые функции
- •7.4 Передача функций по ссылке и возврат функцией ссылки
- •Тема 8 Строковые функции
- •8.1 Функции работы со строками
- •8.2 Работа с блоками текста
- •Тема 9 Математические функции
- •9.1 Встроенные константы
- •9.2 Встроенные функции
- •Тема 10 Работа с файлами и каталогами,
- •10.1 Функции работы с файлами
- •10.2 Блокирование файла
- •10.3 Функции работы с каталогами
- •10.4 Запуск внешних программ
- •Тема 11 Работа с датами и временем,
- •11.1 Представление времени в формате timestamp
- •11.2 Работа с датами, григорианский календарь
- •11.3 Посылка писем через php
- •Тема 12 Работа с www
- •12.1 Установка заголовков ответа
- •12.2 Работа с Cookies
- •Тема 13 Управление интерпретатором
- •13.1 Управление интерпретатором
- •13.2 Управление сессиями
- •Тема 14 Работа с базой данных mysql
- •14.1 Соединение с базой данных
- •14.2 Выполнение запросов к базе данных
- •Тема 15 Загрузка файлов на сервер
- •15.1 Multipart-формы, тег выбора файла
- •15.2 Поддержка закачки в php
- •Учебное издание
- •Разработка программного обеспечения на платформе net: php.Net
- •246019 Г. Гомель, ул. Советская, 104
Тема 6 Работа с массивами
6.1 Сортировка массивов
6.2 Функции для работы с массивами
6.1 Сортировка массивов
Сортировка массива по значениям (asort()/arsort()).
Функция assort() сортирует массив, указанный в ее параметре в алфавитном (если это строки) или в возрастающем (для чисел) порядке. При этом сохраняются связи между ключами и соответствующими им значениями. Пример:
$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha",
"d"=>"Processor");
asort($A);
foreach($A as $k=>$v) echo "$k=>$v ";
// выводит «c=>Alpha d=>Processor b=>Weapon a=>Zero»
Функция arsort() упорядочивает массив по убыванию.
Сортировка по ключам (ksort()/krsort()).
Функция ksort() сортирует массив по ключам (в порядке возрастания). Пример:
$A=array("d"=>"Zero","c"=>"Weapon","b"=>"Alpha","a"=>"Processor");
ksort($A);
for (Reset($A); list ($k, $v) =each ($A);) echo"$k=>$v";
// выводит "a=>Processor b=>Alpha c=>Weapon d=>Zero"
Функция для сортировки по ключам в обратном порядке – krsort().
Сортировка по ключам при помощи функции uksort().
Используется при сортировке по более сложному критерию, чем просто по алфавиту. Например, пусть в $Files хранится список имен файлов и подкаталогов в текущем каталоге. Необходимо вывести этот список не только в лексикографическом порядке, но также и чтобы все каталоги предшествовали файлам. В этом случае можно воспользоваться функцией uksort(), написав предварительно функцию сравнения с двумя параметрами.
Пример. Сортировка с помощью пользовательской функции
// Эта функция должна сравнивать значения $f1 и $f2 и возвращать:
// -1, если $fl<$f2,
// 0, если $fl==$f2
// 1, если $fl>$f2
function FCmp($f1,$f2)
{
// Каталог всегда предшествует файлу
if (is_dir($fl) && !is_dir($f2)) return -1;
// Файл всегда идет после каталога
if (!is_dir($fl) && is_dir($f2)) return 1;
// Иначе сравниваем лексикографически
if($f1<$f2) return -1; elseif ($fl>$f2) return 1; else return 0;
}
// Пусть $Files содержит массив с ключами — именами файлов
// в текущем каталоге. Отсортируем его.
uksort($Files,"FCmp");
// передаем функцию сортировки "по ссылке"
Cвязи между ключами и значениями функцией uksort() сохраняются.
Сортировка по значениям при помощи функции uasort().
Функция uasort() аналогична uksort(), с той разницей, что пользовательской функции сортировки передаются не ключи, а очередные значения из массива. При этом также сохраняются связи в парах ключ=> значение.
Переворачивание массива array_reverce()
Функция array_reverse() возвращает массив, элементы которого следуют в обратном порядке относительно массива, переданного в параметре. При этом связи между ключами и значениями сохраняются. Например, вместо того, чтобы ранжировать массив в обратном порядке при помощи arsort(), можно отсортировать его в прямом порядке, а затем перевернуть:
$A=array ("a"=>"Zero", "b"=>"Weapon", "c"=>"Alpha",
"d"=>"Processor");
asort ($A);
$A=array_reverse($A);
Сортировка списка sort()/rsort()
Эти две функции предназначены для сортировки списков (под списками понимаются массивы, ключи которых начинаются с 0 и не имеют пропусков). Функция sort() сортирует список по значениям в порядке возрастания, a rsort() – в порядке убывания. Пример:
$A=array ("One", "Two", "Three", "Four");
sort ($A) ;
for($i=0; $i<count($A); $i++) echo "$i:$A[$i] ";
// выводит «0: Four 1: Two 2 : Three 3 :One»
Любой ассоциативный массив воспринимается этими функциями как список. То есть после упорядочивания последовательность ключей превращается в 0,1,2,..., а значения нужным образом перераспределяются. Cвязи между парами ключ=>значение не сохраняются, более того – ключи просто пропадают, поэтому сортировать что-либо, отличное от списка, нецелесообразно.
Сортировка списка при помощи функции usort().
Эта функция является «гибридом» функций uasort() и sort(). От sort() она отличается тем, что критерий сравнения обеспечивается пользовательской функцией. А от uasort() – тем, что она не сохраняет связей между ключами и значениями, а потому пригодна только для сортировки списков. Пример:
function FCmp($a,$b)
{ return strcmp ($a, $b); }
$A=array("One", "Two", "Three", "Four");
usort($A);
for ($i=0; $i<count ($A); $i++) echo "$i:$A[$i]";
// выводит «0:Four 1:One 2:Three 3:Two»
Функция strcmp(), возвращает –1, если $а<$b, 0, если они равны, и 1, если $а>$b. Приведенный здесь пример полностью эквивалентен простому вызову sort().
Перемешивание списка shuffle().
Функция shuffle() «перемешивает» список, переданный ей первым параметром, так, чтобы его значения распределялись случайным образом. При этом, во-первых, изменяется сам массив, а во-вторых, ассоциативные массивы воспринимаются как списки. Пример:
$А=аrrау(10,20,30,40,50);
shuffle($A);
foreach($A as $v) echo "$v ";
Приведенный фрагмент выводит числа 10, 20, 30, 40 и 50 в случайном порядке. Функция shuffle() использует стандартный генератор случайных чисел, который перед работой необходимо инициализировать при помощи вызова srand(), иначе при повторном вызове программы результат не измениться.
