TIGERCMS.com - документация, статьи и примеры по PHP. [Назад]

Трёхмерный массив и сортировка[Печать]
Разместил: admin . Раздел: Общие. Опубликовано: 09-20-2007 20:04:05
После небольшого перерыва мы возобновляем написание новых статей о php, и продолжаем начатую ранее тему - изучение массивов. Сегодня мы коснёмся трёхмерного массива. Помимо высоты и ширины, как в двумерном, он ещё имеет и глубину, т.е. третьим измерением его является глубина. Наглядным примером трёхмерного массива в жизни может служить любой объёмный предмет, например книга. У неё есть ширина страницы, её длина, а так же глубина, т.е. количество страниц.

Ссылка на каждый элемент такого массива будет осуществляться по его слою, строке и столбцу. Таким образом, можно сказать, что трёхмерный массив - это массив, содержащий массив массивов. Ниже приведён код, показывающий реализацию трёхмерного массива на нашем примере: $mass3mern = array( array( array( "CDR", "CDR-диски", 100), array( "CDRW", "CDRW-диски", 10), array( "FUT", "Футляры", 4) ), array( array( "CDR", "CDR-диски", 100), array( "CDRW", "CDRW-диски", 10), array( "FUT", "Футляры", 4) ), array( array( "CDR", "CDR-диски", 100), array( "CDRW", "CDRW-диски", 10), array( "FUT", "Футляры", 4) ) ); По данному шаблону, Вы можете создавать четырёх-, пяти-, двадцатимерные массивы. Всё зависит от Вашей фантазии и потребности. Хочу только добавить, что если будете использовать массив более 3-ей размерности, то будет очень тяжело: запутаться в таком количестве операторов не составит труда. Но думаю, что на практике, более третьей размерности, Вам массив не понадобится.

Сортировка массивов

Сортировка массива это довольно часто встречающаяся задача. К примеру, Вы пишете обработчик какой-либо формы заказа, использующей массив. И Вам необходимо посмотреть, какой же следующий по порядку был сделан заказ, чтобы его обработать. Если записей не много, то это ещё не проблема, а если их десятки? Сотни? Время - деньги, поэтому существует очень полезная штука в php - сортировка.

Для сортировки используется функция sort(), позволяющая отсортировать массив в алфавитном порядке, например: $products = array( "CDR-диски", "CDRW-диски", "Футляры" ); sort($products); Теперь элементы массива будут отсортированы в алфавитном порядке.

Значения можно упорядочивать также в цифровом порядке: $prices = array(100,10,4); sort($prices); Для хранения информации о товарах и ценах используется ассоциативный массив, для которого функции сортировки немного другие. В следующем примере, создаётся ассоциативный массив, содержащий три товара и связанные с ними цены, а затем сортирует массив в порядке увеличения цен : $prices = array("CDR-диски"=>100, "CDRW-диски"=>10, "Футляры"=>4); asort($prices); Как Вы могли заметить, здесь используется функция asort(), которая упорядочивает массив в соответствии со значениями элементов. В данном массиве значения - это цены, а ключи - текстовые описания.

Если сортировку нужно выполнить не по ценам, а по описаниям, следует использовать функцию ksort(), которая выполняет сортировку по ключам. Следующий код приведёт к упорядочиванию ключей массива в алфавитном порядке: $prices = array("CDR-диски"=>100, "CDRW-диски"=>10, "Футляры"=>4); ksort($prices);

Сортировка массивов в обратном порядке

Для сортировки массива в обратном порядке существуют другие функции, очень похожие на те, с которыми мы работали. Это:
  • rsort() - сортировка одномерного численно-индексированного массива в порядке убывания;
  • arsort()- сортировка одномерного ассоциативного массива в порядке убывания значений элементов;
  • ksort() - сортировка одномерного ассоциативного массива в порядке убывания значений ключей элементов.

Другие манипуляции с массивом

Вкратце расскажу, что ещё можно делать с массивами. При создании нового массива текущий указатель инициализируется так, чтобы указывать на первый элемент массива. Вызов функции current( $array name) возвращает первый элемент. Вызов функции each() или next() перемещает указатель вперёд на один элемент. Функция reset() возвращает указатель на первый элемент массива. Для перемещения в массиве в обратном направлении можно воспользоваться функциями end() и prev(). Иногда требуется выполнить одинаковые действия, по отношению ко всем элементам массива или изменять их одинаковым образом. Делать это позволяет функция array_walk: int array_walk(array arr, string func, [mixed userdata])
Источник: http://web-brodilka.ru   Прочитана 1636 раз.