Язык программирования PHP - [33]

Шрифт
Интервал


>

>

>

>

>

>

>

Название

> name=title size=5>

Краткое содержание

> type=text name=description size=5>

>

Автор

> name=author size=5>

Дата публикации

> type=text name=published size=5>

>

>



Будем упорядочивать данные, переданные этой формой, по убыванию их значений, сохраняя при этом значения ключей. Для этого удобно воспользоваться функцией arsort(). Поскольку нам важен только новый порядок элементов, сохраним в новом массиве ключи исходного массива в нужном порядке. Мы сохраняем ключи исходного массива, поскольку они являются именами элементов, из которых конструируется описание документа, а помнить их важно. Итак, получаем такой скрипт:


>

>print_r($_GET); echo "
";

>arsort ($_GET);

> // сортируем массив в обратном порядке,

> // сохраняя ключи

>print_r($_GET); echo "
";

>$ordered_names = array_keys($_GET);

> // составляем новый массив

>foreach($ordered_names as $key => $val)

>echo "$key :$val
";

> // выводим элементы нового массива

>?>



Сортировка массива по ключам


Очевидно, что может возникнуть необходимость в сортировке массива по значениям ключей. Например, если у нас есть массив данных о книгах, как в приведенном выше примере, то вполне вероятно, что мы захотим отсортировать книги по именам авторов. Для этого в PHP также не нужно писать много строк кода – можно просто воспользоваться функцией ksort() для сортировки по возрастанию (прямой порядок сортировки) или krsort() – для сортировки по убыванию (обратный порядок сортировки). Синтаксис этих функций опять же аналогичен синтаксису функции sort().


>

>$books = array("Пушкин"=>"Руслан и Людмила",

> "Толстой"=>"Война и мир",

> "Лермонтов"=>"Герой нашего времени");

>ksort($books);

> // сортируем массив,

> // сохраняя значения ключей

>print_r($books);

>?>



Получим:


>Array ( [Лермонтов] => Герой нашего времени

> [Пушкин] => Руслан и Людмила

> [Толстой] => Война и мир )



Сортировка с помощью функции, заданной пользователем


Кроме двух простых способов сортировки значений массива (по убыванию или по возрастанию) PHP предлагает пользователю возможность самому задавать критерии для сортировки данных. Критерий задается с помощью функции, имя которой указывается в качестве аргумента для специальных функций сортировки usort() или uksort(). По названиям этих функций можно догадаться, что usort() сортирует значения элементов массива, а uksort() – значения ключей массива с помощью определенной пользователем функции. Обе функции возвращают true, если сортировка прошла успешно, и false – в противном случае. Их синтаксис выглядит следующим образом:


>usort (массив , сортирующая функция)

>uksort (массив , сортирующая функция)


Конечно же, нельзя сортировать массив с помощью любой пользовательской функции. Эта функция должна удовлетворять определенным критериям, позволяющим сравнивать элементы массива. Как должна быть устроена сортирующая функция? Во-первых, она должна иметь два аргумента. В них интерпретатор будет передавать пары значений элементов для функции usort() или ключей массива для функции uksort(). Во-вторых, сортирующая функция должна возвращать:


- целое число, меньшее нуля, если первый аргумент меньше второго;


- число, равное нулю, если два аргумента равны;


- число большее нуля, если первый аргумент больше второго.


Как и для других функций сортировки, для функции usort() существует аналог, не изменяющий значения ключей, – функция uasort().


Пример 7.10. Допустим, у нас есть массив, содержащий такие сведения о литературных произведениях, как название, автор и год создания. Мы хотим упорядочить книги по дате создания.


>

>// массив выглядит таким образом:

>$books = array("Герой нашего времени" =>

> array ("Лермонтов", 1840),

> "Руслан и Людмила" => array("Пушкин",1820),

> "Война и мир" => array ("Толстой",1863),

> "Идиот" => array("Достоевский",1868));

>/* можно, конечно переписать этот массив

>по-другому, сделав год издания, например,

>индексом, но гораздо удобнее написать свою

>функцию для сортировки */

>uasort($books,"cmp");

>// сортируем массив с помощью функции cmp

>foreach ($books as $key => $book) {

> echo "$book[0]: \"$key\"
";

>}

>function cmp($a,$b){

>// функция, определяющая способ сортировки

> if ($a[1] < $b[1]) return -1;

> elseif ($a[1]==$b[1]) return 0;

> else return 1;

>}

>?>



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


>Пушкин: "Руслан и Людмила"

>Лермонтов: "Герой нашего времени"

>Толстой: "Война и мир"

>Достоевский: "Идиот"



Мы применили нашу собственную функцию сортировки ко всем элементам массива. Далее рассмотрим, как применить к элементам массива любую другую пользовательскую функцию.


Применение функции ко всем элементам массива


Функция array_walk(массив, функция [, данные]) применяет созданную пользователем функцию функция ко всем элементам массива массив и возвращает true в случае успешного выполнения операции и false – в противном случае.


Пользовательская функция, как правило, имеет два аргумента, в которые поочередно передаются значение и ключ каждого элемента массива. Но если при вызове функции array_walk() указан третий аргумент, то он будет рассмотрен как значение третьего аргумента пользовательской функции, смысл которого определяет сам пользователь. Если функция пользователя требует больше аргументов, чем в нее передано, то при каждом вызове array_walk() будет выдаваться предупреждение.


Рекомендуем почитать
Готовые сочинения по былинам. 5-6 классы

Дорогие ребята!На уроках литературы вы знакомитесь с произведениями устного народного творчества. Один из самых сложных жанров фольклора – былины. У вас часто возникают трудности в изучении этих произведений – особенно в написании сочинений. Нынешнему школьнику непросто понять мир старинных былин и чувства, которые древнерусский сказитель вкладывал в них. В тексте былин всегда встречается много слов и образов, которые в умах и сердцах наших далёких предков вызывали яркие впечатления и горячие отклики, а современному человеку их необходимо пояснять.Эта книга поможет вам легко выполнить самые различные задания учителя: найти постоянные эпитеты в тексте былины, дать сравнительную характеристику персонажей, ответить на вопросы по содержанию произведения, подобрать пословицы на заданную тему и объяснить их происхождение и, конечно же, написать отличное сочинение.На темы, которые предлагает школьная программа, в книге представлены уже готовые сочинения.


Нормы русского литературного языка

Настоящее пособие помогает формированию и совершенствованию у студентов умений и навыков произношения, словоупотребления, использования грамматических форм, правописания и постановки знаков препинания. Предназначено как для практических аудиторных занятий, так и для самостоятельной работы.Для студентов, изучающих курсы «Русский язык и культура речи», «Культура речи», «Стилистика русского языка и культура речи», «Стилистика и литературное редактирование» и др. Данное пособие может быть использовано также выпускниками средних школ и абитуриентами при подготовке к Единому государственному экзамену по русскому языку.


Язык и человек. К проблеме мотивированности языковой системы

В книге развивается идея об адаптации языковой системы к биосоциальным особенностям человека и осуществлению им коммуникативного процесса как главном факторе функциональной, системно-структурной и знаковой (семиотической) специфики языка. В качестве иллюстративной языковой системы послужил главным образом русский язык в его общих с другими языками свойствах. В соответствии с поставленными задачами в книге объясняется специфика четырех семиотических измерений языка – языковых знаков, их семантики, синтактики и прагматики, чему подчинена структура книги.


Самоучитель Adobe After Effects 6.0

Обучение созданию профессиональных видеофильмов и обработки их на компьютере представлено в виде 12 уроков. Рассматривается, как с помощью программы Adobe After Effects можно редактировать и рисовать последовательность кадров, добавлять титры и заголовки, применять различные видеоэффекты, редактировать звуковое сопровождение фильма. Описывается процесс настройки прозрачности и наложения слоев видео для последующего экспорта фильма в различных форматах. Показываются способы создания анимации при масштабировании, поворотах и в движении с наложением титров и спецэффектов.


История и культурология

Раскрываются становление культурно-исторического подхода к изучению общественного развития и воззрения его ведущих представителей. Представлены основные этапы и закономерности мирового культурно-исторического процесса от доисторического общества до наших дней. На примере величайших цивилизаций древности, средневековья и Нового времени освещаются важнейшие исторические события и явления культуры, определившие облик современной эпохи. Особое внимание уделено отечественной истории и культуре. В отличие от первого издания (М.: Логос, 1999) пособие содержит главу о западной цивилизации в XX в., а также приложения, справочный аппарат и иллюстрации.Для студентов высших учебных заведений.


Микроэкономика

В данном конспекте лекций в доступной форме изложены все основные вопросы по дисциплине «микроэкономика».Книга поможет получить основные знания и подготовиться к зачету или экзамену. Рекомендуется студентам экономических специальностей.