Учебник по основам PHP




Массивы


См. также: is_array(), explode(), implode(0, split() и join().

Инициализация массива, добавление/извлечение элементов

array

Создание и инициализация массива

array array ([mixed ...])

Языковая конструкция, возвращающая созданный массив. Индексы в ассоциированных массивах и значения элементов разделяются оператором =>. < /FONT >

Пары Index => value разделяются запятыми, они определяют индекс и значение. Индекс может быть строковым или числовым (но в ассоциированных массивах ведет себя как строковый). Если индекс не указывается, подразумевается по умолчанию подставляемое числовое значение автоинкремента (начиная с 0). Если указываются два элемента с одинаковыми индексами, последний заменяет первый. < /FONT >

Пример 1.

Sfruits = array ( // создаем двухмерный ассоциативный массив "fruits" => array ("a"=>"orange". "b"=>"banana". "c"=>"apple"). // эквивалент записи: Sfruits ["fruits"]["a"] = "orange"; и т д. "numbers" => array (1.2. 3.4. 5.6). // эквивалент записи: Sfruits ["numbers"][]= 1: и т.д. "holes" = > array ("first". 5= > "second", "third") ):< /FONT >

Пример 2.

Sarray = arrayt 1. 1. 1. 1. 2=>4. 19. 3=>13). print_r($array): // распечатать массив Вывод будет следующим: Array ( [0] -> 1 [1] -> 1 С2]=> 4 [3]= > 13 [4] => 19 ) < /FONT >

Пример 3 — одномерный массив.

$firstquarter = arrayd => 'January'. 'February', 'March'); pnnt_r($firstquarter): Вывод будет следующим: Array ( [1] => 'January' [2] = > 'February' [3] => 'March1 ) < /FONT >

См. также list().

array_pad

Добавление в массив нескольких элементов

array array_pad (array input, int pad_size, mixed pad_value)

Возвращает копию массива, в который добавлены элементы со значением pad_value, так, что число элементов в результирующем массиве становится равным pad_size. Если pad_size > 0, элементы добавляются справа, если < 0, то — слева. Если значение pad_size меньше числа элементов в исходном массиве, никакого добавления не производится (возвращается исходный массив).

$input = array (12. 10. 4): Sresult = array_pad (Sinput, 5, 0), $ result is array (12. 10. 4. 0. 0) Sresult = array_pad (Sinput. -7. -1). $ result is array (-1. -1. -1. -1, 12. 10. 4) Sresult = array_pad (Sinput. 2. "noop"): $ Уупс - нечего добавить < /FONT >

range

Создание массива из диапазона целых чисел

array range (int low. irvt high)

Создает и возвращает массив, содержащий целые числа от наименьшего low до наибольшего high включительно.

$numbers = range (3.6): // теперь Snumbers = array (3. 4. 5 б) < /FONT >

array_pop

Получение и удаление последних элементов массива

mixed array_pop (array array)

$stack = array ("orange", "apple", "raspberry"): Sfruit = array_pop (Sstack); // и их осталось двое: "orange", "apple" // a Sfruit = "raspberry". < /FONT >

См. также: array_push(), array_shift() и array_unshift().

array_ push

Добавление элементов в конец массива

int array_push (array array, mixed var [, mixed ...])

Возвращает новое число элементов в массиве.

Для одного элемента действие эквивалентно $array[] = $var; < /FONT >

$stack = array (1. 2); $n = array_push (Sstack. "WW". 3): // $n - 4; Sstack (1. 2. "WW". 3). < /FONT >

См. также: array_pop(), array_shift() и array_unshift().

array_shift

Получение и удаление первых элементов массива

mixed array_shift (array a)

Возвращает первый элемент массива и удаляет его, сдвигая все последующие элементы массива а на одну позицию вперед.

Sargs - array ("-v". "-f"). $opt = array_shift (Sargs); 7 теперь $args = array ("-f");. a $opt = '-v":

См. также: array_unshift(), array_push() и аггау_рор().

array_unshift

Добавление элементов в начало массива

int array_unshift (array агг, mixed var [, mixed ...])

Добавляет перечисленные элементы var в начало массива агг, при этом все последующие элементы агг сдвигаются на число добавленных. Возвращает новое число элементов в массиве.

$queue = array ("pi", "рЗ"). array_unshift ($queue. "o4". "p5", "рб"); // возвратит 5 //теперь $queue = ("p4", "p5". "рб". "pi", и "рЗ").

См. также: array_shift(), array_push() и array_pop().

list

Занесение элементов массива в переменные

void "list(...);

Подобно функции arrayO, это языковая конструкция. Она назначает перечисленным переменным значения элементов массива. Первой указанной переменной назначается значение первого элемента массива, второй — второго и т. д.

<table> <tr> <th>Employee name</th> <th>Salary</th> </tr> <?php $result - mysql ($conn. "SELECT id. name, salary FROM employees"): while (list ($id. $name. Ssalary) - mysql_fetch_row (Sresult)) { print (" <tr>\n". <td><a hr°f-\""'nfo.php''id=$id\"> $name</a></td>\n". <td>$salary</td>\n". " </tr>\n"); } ?> </table>

См. также: extract(), each() n array().

compact

Занесение набора переменных в массив

array compact (mixed varname [, mixed ...])

Создает массив из указанных переменных, имена которых указаны как аргументы varname, со значениями этих переменных. Число аргументов неопределенное. Аргументами могут быть строки или массивы строк. Если в аргументе указано имя несуществующей переменной, он пропускается. Действие функции противоположно функции extract(). .

$city = "Санкт-Петербург"; Sstate = "РФ"; Sevent - "Трехсотлетие". location_vars = array ("city", "state"); $result = compact ("event". "nothing_here". $locat.ion_vars); // теперь. Iresult -= array ("event" -> "Трехсотлетие". // "city" => "Санкт-Петербур!". "state" => 'РФ")

См. также extract().

extract

Экспорт элементов массива в переменные

void extract (array var_array [, int extractjtype [, string prefix]])

Эта функция экспортирует из ассоциативного массива var_array элементы, делая их глобальными переменными. Индекс элемента используется как имя переменной, а значение элемента — как значение переменной (глобальные переменные — это элементы «символьной таблицы» — массива глобальных переменных $GLOBALS[], и функция extract() копирует элементы массива var_array в массив $GLOBALS[]). Действие функции extract() противоположно compact().

В ходе выполнения функция проверяет элементы массива var_array на наличие коллизий — совпадений с уже существующими переменными. Параметр extract_type определяет, каким образом коллизии будут обрабатываться, и может принимать одно из следующих значений:

  • EXTRJ3VERWRITE — при коллизии перезаписывать существующую переменную (по умолчанию);
  • EXTR_SKIP — при коллизии НЕ перезаписывать существующую переменную;
  • EXTR_PREFIX_SAME — при коллизии добавлять к имени создаваемой переменной префикс prefix;
  • EXTR_PREFIX_ALL — добавлять к именам всех создаваемых переменных префикс prefix.

Заметьте, что аргумент prefix требуется только тогда, когда аргумент extract_type имеет значение EXTR_PREFIX_SAME или EXTR_PREFIX_ALL

Функция проверяет имя каждой создаваемой переменной на соответствие правилам для имен переменных, и если имя недопустимо, то переменная не создается.

Пример возможного совместного использования с функцией wddx_ deserialize():

<?php /* Предположим, что массив $var_array возвращен wddx deserialize() */ Ssize = "large": $var_array - ar^ay ("color" => "blue". "size" -> "medium". "shape" => "sphere"): extract ($var_array. EXTR_PREF1X_SAME. "wddx"): print "Scolor. $si?e. Sshape. $wddx_size\n": // выведет: blue, large, sphere, medium ?>

См. также compact().

Работа с одним массивом

count

Определение числа элементов в комплексной переменной

int count (mixed var)

Возвращает число элементов в массиве или объекте var. Если var -скалярная неременная, то возвращает 1, если такая переменная существует, или 0, если такой переменной нет.

Заметьте, что 0 возвращается и в случае, если переменная не существует, и в случае, когда указан массив, не содержащий элементов. Используйте isset() для проверки существования переменной.

$а[0] = 1; $а[1] - 3; $3^2] = 5 Sresult = count~($a); //возвратит 3 а[2] =1: // такой элемент уже существует $а[4] = "": // пустой элемент $а[6] = 5: $result = count ($a), //теперь возвратит 5

См. также: sizeof(), isset() и is_array().

sizeof

Число элементов массива

int sizeof (array array)

Возвращает число элементов массива аналогично функции count ().

array_count_values

Вычисление числа одинаковых значений массива

array array_count_values (array input)

Возвращает массив, имеющий в качестве индексов уникальные значения массива input, а в качестве значений — количество одинаковых элементов (значений) в массиве input (то есть частоту встречаемости).

$агтау = атау (1. "hello". I. "world", "hello"); array_count_values (Sarray): /7 возвращает array (1=>2. "hello" = >2. "world" = >1< /P>< /P>

in_array

Проверка массива на наличие значения

bool in_array (mixed needle, array haystack)

Возвращает TRUE, если в массиве haystack содержится элемент со значением needle.

$os = array ("Mac". "NT". "Irix". "Liniu"); if (in_array ("Inx". $os)){ print "Inx имеется". }

array_unique

Удаление дублирующихся значений массива

array array_unique (array array)

Возвращает массив, из которого удалены дубликаты значений. Индексы сохраняются.

Sinput = array ("a" => "XX". "YY". "b" => "XX". "ZZ". "YY"): $г = array_unique (Sinput): // Теперь $г = ("b" = > "XX". "1" = > "ZZ", "2" = > "YY") < /P > < /P >

array values

Удаление ассоциативных индексов массива

array array_values (array input)

Возвращает массив со значениями массива input, но без их индексов, то есть превращает ассоциативный массив в простой (скалярный).

$array = array ("size" => "XL", "color" => "gold"): array_values (Sarray): // returns array ("XL", "gold") //Пример реализации функции array_values для РНРЗ function _array_values ($arr) { $t = array(); while (list($k. $v) = each ($arr)) { $t[] = $v; return $t; } } < /P >

array_keys

Получение в массиве индексов массива

array array_keys (array input [. mixed search_value])

Возвращает в массиве (все) индексы массива input. При указании необязательного аргумента search_value в массиве возвращаются только индексы элементов массива input, имеющих значение search_ value.

$array = array (0 => 100, "color" => "red". 15): array_keys ($array): // returns array (0. "color". 1) $array = array ("blue", "red", "green", "blue", "blue"): array_keys ($array. "blue"). // returns array (0. 3. 4) < /P >

Пример алгоритма реализации функции array_keys (для PHP 3):

function _array_keys ($arr. $term="") { $t = array(); while (list($k.$v) = each (Sarr)) { if (Sterm && $v != $term) continue: $t[] = $k: } return $t: }

См. также array_values().

array_flip

Обмен местами индексов и значений массива

array array_flip (array trans)

Возвращает массив, в котором индексы и значения взаимозаменены.

$trans=array(3.4.5); pnnt_r($trans): // Выводит Array ( [0]=>3. [1]=>4. [2]=>5 ) Strans= array_flip (Strans); pnnt_r($trans): //Выводит: Array( [3]= >0, [4] = >1. [5]=>2 )< /P>

array_sum

Суммирование всех элементов массива

mixed array_sum (array input [, int num_req])

Возвращает сумму всех числовых значений элементов массива. Тип возвращаемого числа (integer пли float) будет зависеть от типа значений в массиве.

$а = аггау(2.4.6.8), ' echo "sum(a) = " array_sumC$a) "\n", // prints- sum(a) = 20 $b = array("a"=>1.2."b"=>2.3."c"=>3.4): echo "sum(b) = ",array_sum($b). "\n"; // prints sum(b) = 6.9

array_rand

Случайная выборка индексов массива

mixed array_rand (array input [, int num_req])

Возвращает в массиве случайным образом выбранные индексы (!) элементов массива input. Число этих элементов указывается аргументом num_req (по умолчанию 1). Если выбирается один элемент, то возвращается не массив, а значение.

srand ((double) microtime() 10000000); //инициализировать генератор случайных чисел Sinput = array ("Neo". "Morpheus". "Trinity". "Cypher". "Tank"): $rand_keys = array_rand (Sinput. 2); print $input[$rand_keys[0]]."\n". print $input[$rand_keys[l]]."\n":

Работа с несколькими массивами

array_diff

Определение исключительного пересечения массивов

array array_diff (array arrayl, array array2 [, array ...])

Возвращает массив, содержащий значения, имеющиеся только в массиве arrayl (и не имеющиеся в любых других). Индексы не сохраняются.

$arrayl = array ("a" => "green", "red", "blue"): $array2 = array ("b" => "green", "yellow", "red"); Sresult = arrayjJiff (Sarrayl. $array2); // Sresult = array ("blue"):

См. также array_intersect().

array_ intersect

Определение включительного пересечения массивов

array array_intersect (array arrayl, array array2 [, array ...])

Возвращает массив, содержащий значения массива arrayl, имеющиеся uo всех остальных массивах. Индексы не сохраняются.

Sarrayl = array ("a" => "green", "red", "blue"). Sarray2 = array ("b" => "green", "yellow", "red"): Sresult = array_intersect (Sarrayl. Sarray2). //Sresult = array ("a" -> "green", "red"): < /P >

См. также array_d1ff().

array_merge

Объединение массивов

array arrayjnerge (array arrayl, array arrayZ [, array ...])

Возвращает массив, содержащий все элементы перечисленных массивов. Элементы последующего массива добавляются к концу предыдущего. При наличии элементов с одинаковыми строковыми индексами последующий элемент перезаписывает предыдущий. Для массивов с числовыми индексами совпадающие индексы делаются уникальными и общее число элементов таким образом сохраняется.

Sarrayl = array ("color" => "red". 2. 4): $array2 = array ("a", "b". "color" => "green", shape" => "t". 4). Sail = arrayjnerge (Sarrayl. Sarray2). // Sail = arrayC'color" => "green". 2. 4. "a", "b". "shape" => "t". 4).

См. также array_merge_recursive().

array_merge_recursive

Объединение сложных массивов

array array_merge_recursive (array arrayl, array аггау2 [. array ...])

Функция сходна с arrayjnergeO с тем дополнением, что она работает с многомерными и древовидными массивами, а элементы с одинаковыми строковыми индексами превращаются в подмассивы (см. пример). Для числовых индексов поведение функции аналогично аггау_ merge().

$arl = array ("color" => array ( "favorite" => "red"). 5). $ar2 = array (10. "color" => array ("favorite" => "green", "blue")). Sresult = array_merge_recursive ($arl. $ar2). // Sresult = arrayC'color" => array ( // "favorite" => array ("red" "green"). // "blue"). 5. 10).

См. также array merge().

array_slice

Получение части массива

array array_slice (array array, int offset [, int length])

Возвращает массив, содержащий последовательность элементов массива array, начиная с элемента, имеющего позицию offset, в количестве length элементов.

Если offset > 0, то последовательность будет начинаться с элемента, имеющего позицию offset от начала массива, если < 0, то отчет производится от конца массива. Не забывайте, что первый элемент имеет нулевую позицию, а последний здесь (-1).

Если указывается length>0, то это число возвращаемых в массиве элементов; если length < 0, то это позиция последнего возвращаемого элемента в массиве array от его конца. Если length не указывается, то возвращаются элементы вплоть до конца массива array.

$input = array ("a", "b". "с", "о", "е"), // помните. $input[0]="a" $output = array_slice ($input. 2): // возвращает "c"."d". и "е" $output = array_slice (Sinput. 2. -1). // возвращает "c"."d" $output = array_slice (Sinput. -2. 1); // возвращает '^".предпоследний $output = array_s!1ce (Sinput. 0, 3); // возвращает "a"."b", и "с"

См. также array_splice().

array_splice

Удаление части массива или замена ее частью другого

array array_splice (array array, int offset [, int length [. array replacement]])

Удаляет последовательность элементов массива array путем замены их на элементы из массива repl acement, начиная с элемента массива array, имеющего позицию offset, в количестве length элементов. Воз-вращает массив удаленных элементов.

Если offset > 0, то последовательность будет начинаться с элемента, имеющего позицию offset от начала массива; если < 0, то отсчет производится от конца массива. Не забывайте, что первый элемент имеет нулевую позицию, а последний — (-1).

Если указывается length > 0, то это число удаляемых элементов массива array; если length<0, то это позиция последнего удаляемого элемента в массиве array от его конца. Если length не указывается, то удаляются элементы вплоть до конца массива array. Чтобы удалить все элементы массива array, начиная от позиции offset и вплоть до конца массива array, при указанном аргументе replacement используйте аргумент length, равный count($input).

Реально выяснилось, что при указании отрицательных аргументов offset, length функция работает неправильно.

Если указан массив replacement, то удаляемые элементы заменяются на элементы массива repl acement. Если offset и length такие, что удалять нечего, то элементы массива replacement вставляются в позицию, указанную аргументом offset. Если массив replacement состоит из одного элемента, его можно указать как простую переменную, не заключенную в структуру аггау(). Действие следующих функций эквивалентно:

array_push (Sinput, $x, Sy)

array_splice (Sinput, count (Sinput), 0, array ($x, Sy))

array pop (Sinput)

array_splice (Sinput, -1)

array shift (Sinput)

array _splice (Sinput, 0, 1)

array unshift (Sinput, $x, Sy)

array splice (Sinput, 0, 0, array ($x, $y))

$a[$x] = Sy

array splice (Sinput, $x, 1, Sy)

$input = array ("Al". "B2". "C3", "D4"). array_splice (Sinput. 2); // $input = array ("Al". "B2") //array_splice ($input. 1. -1); // $input = array ("Al". "D4") array_splice ($input. 1. count($input), "XI"); // Sinput = array ("Al", "XI") //array_splice (Sinput -1. 1. arrayC'Yl". "Y2")); // Sinput = array ("Al". "B2". // "C3". "Yl". "Y2")

См. также array_slice().

Курсор массива

reset

Сброс курсора массива

mixed reset (array array)

Устанавливает внутренний курсор массива array на его начало и возвращает значение начального элемента.

См. также: current(), each(), next(J и prev().

end

Перемещение курсора массива в конец

mixed end (array array)

Перемещает внутренний курсор массива array на последний элемент и возвращает этот элемент (его значение).

См. также: current(), each(), end(), next() и reset().

next

Перемещение курсора массива вперед

mixed next (array arr)

Возвращает значение элемента массива arr, на которое указывает внутренний курсор массива (или FALSE, если элементов больше не осталось). В этом действие данной функции аналогично current(), но затем функция next() перемещает курсор массива на следующий элемент.

Если перемещение курсора вперед приводит к выходу за границы массива, возвращается значение FALSE. FALSE также возвращается, если встречается элемент с пустым значением, поэтому для правильной работы с массивами, содержащими пустые значения или значение индекса 0, используйте функцию each().

См. также: current(), end (), prev() и reset ().

prev

Перемещение курсора массива назад mixed prev (array array)

Возвращает значение элемента массива агг, на которое указывает внутренний курсор массива (или FALSE, если элементов больше не осталось). В этом действие данной функции аналогично currento, но затем функция prev() перемещает курсор массива на предыдущий элемент. В огличие от next(), prev() перемещает курсор не вперед, а назад.

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

См. также: currento, end(), next() и reset().

current

Определение текущего элемента массива

mixed current (array array)

Каждый массив имеет внутренний указатель на «текущий» элемент этого массива — курсор. Функция возвращает элемент, на который указывает курсор массива, не сдвигая курсор.

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

См. также: end(), next(), prev() и reset().

pos

Синоним функции currentf)

mixed pos (array array)

См. также: end(), next(), prev() и reset().

key

Получение индекса текущего элемента массива

mixed key (array array)

См. также: current ()и next ().

each

Получение текущего элемента массива array each (array array)

Возвращает в массиве пару «индекс и значение» текущего элемента массива (на который указывает внутренний курсор) и сдвигает курсор массива на следующий элемент. Возвращаемый массив имеет четыре элемента:

[0] => индекс [1] => 'значение' [key] => индекс [value] => 'значение'

Когда курсор достигает конца массива, функция each() возвращает значение FALSE.

Пример 1.

$foo = array ("bob", "fred". "jussi". "joum". "egon". "marliese"); $bar = each ($foo): // теперь Sba1- = ( 0=>0, l=>'bob'. key=>0. value=>'bob' )

Пример 2.

$foo = array ("Robert" => "Bob'. "Seppo" => "Sepi"): $bar = each ($foo); // теперь $bar = (0=>'Roberf . l-=>'Bob'. key=>'Robert1 .value => 'Bob')

Функция each() обычно используется в паре с list() для перебора элементов массива, например $HTTP_POST_VARS[]:

echo "Values submitted via POST method:<br>". reset ($HTTP_POSM/ARS). while (list ($key. $val) - each ($HTTP_POST_VARS)) { echo "$key =•> $val<br>"

См. также: key(), list(), current(), reset(), next() и prev().

array _walk

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

Int array_wa!k (array arr, string func, mixed userdata)

Применяет пользовательскую функцию func к каждому элементу массива arr. В пользовательскую функцию с именем func передаются три (два) аргумента: значение текущего элемента, его индекс и аргумент userdata, если он указан.

См. пример использования с функцией create_function().

Если func требует более трех (двух) аргументов, при каждом ее вызове будет выдаваться предупреждение. Чтобы блокировать выдачу этих предупреждений, ставьте знак «@» перед функцией аггау_ walkO или используйте функцию error_reporting().

Функция func будет получать значения и индексы массива arr «по значению», то есть не сможет вносить в него изменения; если это необходимо, передавайте аргумент агг «по ссылке», указав перед его именем «&», и тогда все изменения отразятся на массиве.

В РНР 4 необходимо явно вызвать функцию reset(), чтобы установить внутренний курсор массива на первый элемент.

$v = array ("d"=>"Al". "а"=>"В2". "b"=>"C3". "c"=>"D4"); function test_alter (&$iteml. $key. $prefix) { // по ссылке Siteml - "$prefix Siteml"; } function test_print ($item2. $key) { echo "$key. $item2<br>\n"; ) array_walk ($v. 'test_pnnt'). reset ($v). array_walk ($v. 'test_alter', '_t_'); reset (Sv): array_walk ($v. 'test_pnnt');

См. также: each ()и list().

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

array_reverse

Расстановка элементов массива в обратном порядке

array array_reverse (array a)

Возвращает массив с обратным порядком элементов. Для вложенных массивов порядок сохраняется.

Sinput = array ("php". 4.0. array ("green", "red")); Sresult = array_reverse (Sinput): // Sresult = array (array ("green", "red"). 4 0. "php").

shuffle

Перемешивание элементов массива

void shuffle (array array)

Перемешивает элементы массива в случайном порядке.

$numbers = range (1.20): srand ((double)microtime()*1000000); // инициализируем генератор shuffle (Snumbers); // случайных чисел while (list (. Snumber) = each (Snumbers)) { echo "Snumber "; }

См. также: arsort(), asort(), ksort(), rsort(), sort() и usort().

sort

Сортировка массива по возрастанию

void sort (array array [, int sort_flags])

Сортирует элементы массива (от меньшего к большему).

<?php Sfruits = array ("lemon", "orange", "banana", "apple"). sort ($fruits): reset (Sfruits): while (list ($key. $val) = each (Sfruits)) {. echo "fruits[".$key."] = " $val, } >>

В этом примере будет напечатано:

fruits[0] = apple frultstl] = banana fruits[2] = lemon fruits[3] = orange

Флаги типа сортировки — значения аргумента sort_flags:

  • SORT_REGULAR — сравнивать элементы «как есть»;
  • SORT_NUMERIC — сравнивать элементы как числа;
  • SORT_STRING — сравнивать элементы как строки.

См. также: arsort(), asort(), ksort(), natsort(), natcasesort(), rsort(), usort(), array_multisort() и uksort().

rsort

Сортировка массива по убыванию

void rsort (array array [, int sort_flags])

Сортирует элементы массива в обратном порядке (от большего к меньшему). Аргумент sort_flags указывает параметры сортировки — см. функцию sort().

Sfruits = array ("lemon", "orange", "banana", apple"): rsort (Sfruits): reset (Sfruits): while (list ($key. $val) = each (Sfruits)) { echo "$key -> $val\n". }

В этом примере элементы массива будут напечатаны в обратном порядке:

fruits[0] = orange fruits[l] = lemon fruits[2] = banana fru1ts[3] = apple

См. также: arsort(), asort(), ksort(), sort() и usort().

asort

Сортировка ассоциативного массива по возрастанию

void asort (array array [, int sort_flags])

Сортирует элементы массива агг с сохранением ассоциативных индексов. По умолчанию — в алфавитном порядке. Значения флагов сортировки (необязательный аргумент sort_flags) приведены в описании sort().

Sfruits = array ("d"=>"lemon". "a"=> "orange". "b"=>"banana". "c"=>"apple"). asort (Sfruits): eset (Sfruits): while (list ($key. $val) = each (Sfruits)) { echo "$key = $val\n". }

Напечатано будет (значения в алфавитном порядке, индексы сохранены):

fnuits[c] = apple fruits[b] = banana fruitstd] = lemon fruits[a] = orange

При тестировании на платформе Windows было проверено, что функция также правильно сортирует строки с символами кириллицы.

См. также: arsort(), rsort(), ksort() и sort()

arsort

Сортировка ассоциативного массива по убыванию

void arsort (array arr [, int sort_flags])

Сортирует элементы массива arr с сохранением ассоциативных индексов. По умолчанию в обратном алфавитном порядке. Значенияфлагов сортировки (необязательный аргумент sort_flags) приведены в описании sort().

Sfruits = array ("d"=>"lemon". "a"=>"orange". "b"=>"banana". "c"=>"apple"): arsort (Sfruits); reset (Sfruits). .vhile (list (Skey. $val) = each (Sfruits)) { echo "$key = Sval\n";

Напечатано будет (значения в обратном алфавитном порядке):

fruitsfa] = orange fruits[d] = lemon fruits[b] = banana fruits[c] = apple

При тестировании на платформе Windows было проверено, что функция также правильно сортирует строки с символами кириллицы.

См. также: asort(). rsort(), ksort() nsort().

ksort

Сортировка массива по возрастанию индексов

int ksort (array array [, int sort_flags])

Сортирует массив array по значениям индексов с сохранением индексных ассоциаций. Аргумент sort_f"lags указывает параметры сортировки — см. функцию sort ().

Sfruits = array ("d"=>"lem". "a"=>"ora". "b"=>"ban". "c"=>"app"); ksort (Sfruits); reset (Sfruits); while (list ($key. $val) = each (Sfruits)) { echo "$key -> $val\n": }

В этом примере будет напечатано:

fruits[a] = ora fruits[b] = ban fruits[c] = app fruits[d] - lem

См. также: asort(), arsort(), sort(), natsort() и rsort().

krsort

Сортировка массива по убыванию индексов

int krsort (array array [, int sort_flags])

Сортирует массив array по значениям индексов в обратном порядке с сохранением индексных ассоциаций. Аргумент sort_flags указывает параметры сортировки — см. функцию sort()

$fruits = array ("d"=>"lem". "a"=>"o-a". "b"=>"ban" "c"=>"app"); krsort (Sfruitsj: eset (Sfrults): / hhile (list ($key. $val) - each (Sfruits)) { echo "$key -> Sval\n". } \

В этом примере будет напечатано:

fri/itstd] lem frintsfcl = app fruitstb] j can fruits[a] = ora

См. также: asort(), arsort(), ksort(), sort(), natsortion rsort().

natsort

«Естественная» сортировка массива

void natsort (array array)

Функция сортировки массива array в «естественном» для человека порядке. Пример различия между обычным порядком сортировки (используемом в функции sort()) и «естественным»:

Sarrayl = Sarray2 = array ("imgl2.png"."imgl0.png"."img2.png"."imgl.png"); sortdarrayl); echo "Стандартная сортировка: ": pnnt_r($a'rayl): natsort($array2). echo 'ЛпЕстественная сортировка: ": print_r($array2):

Будет напечатано:

Стандартная сортировка. Array ( [0] => imgl.png [1] => imglO.png [2] => imgl2.png [3] => irng2.png ) Естественная сортировка: Array ( [3] => imgl.png [2] => img2.png [1] > imglO png [0] => img!2 png )

Более подробную информацию можно получить на странице Мар-О типа Пула «Natural Order String Comparison» (http://www.linuxcare.com.au/projects/natsort/).

См. также: natcasesort(), strnatcmp() и strnatcasecmp().

natcasesort

«Естественная» сортировка массива, нечувствительная к регистру

void natcasesort (array array)

Функция сортировки массива array в «естественном» для человека порядке с игнорированием регистра. Аналог функции natsort(), см. пример различия между обычным порядком сортировки (используемом в функции sort()) и «естественным» в описании функции natsort().

Более подробную информацию можно получить на странице Мартина Пула «Natural Order String Comparison» (http://www.linuxcare. com.au/projects/natsort/).

См. также: sort(), natsort(), strnatcmp() и strnatcasecmp().

uasort

Пользовательская сортировка ассоциативного массива

void uasort (array arr, function cmp_function)

Сортирует массив arr с сохранением индексных ассоциаций, используя для сравнения значения элементов пользовательскую функцию, указанную аргументом cmp_function.

Посмотрите примеры в описаниях функций usort() и uksort().

См. также: usort(), uksort(), sort(), asort(), arsort(), ksort() и rsort().

uksort

Пользовательская сортировка массива по индексам

void uksort (array array, function cmp_function)

Сортирует массив arr по индексам с сохранением индексных ассоциации, используя для сравнения индексов элементов пользовательскую функцию, указанную аргументом cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она в свою очередь должна вернуть положительное или отрицательное число или 0.

function cmp ($a. $b) { if ($a == $b) return 0; return ($a > $b) ? -1 / 1; } $a = array (4 => "four". 3 => "three". 20 => "twenty". 10 => "ten"). uksort ($a. "cmp"). while (list ($key. $value) = each (Sa)) { echo "$key: $value\n". }

Напечатано будет:

20 twenty 10 ten 4: four 3: three

См. также: usort(), uasort(), sort(), asort(), arsort(), ksort(), natsort() и rsort(),

usort

Пользовательская сортировка массива

void usort (array array, string cmp_function)

Сортирует массив агг с сохранением индексных ассоциаций, используя для сравнения значения элементов пользовательскую функцию, указанную аргументом cmp_function. В эту функцию передаются два сравниваемых значения элементов, а она в свою очередь должна вернуть положительное или отрицательное число или 0.

См. пример использования с функцией create_function().

//Пример 1. function cmp ($a, $b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; } $а = array (3. 2. 5. 6, 1). usort {$a. "cmp"): while (list ($key. Svalue) each ($a)) { echo "Skey: Jva1ue\n": }

В этом примере будет напечатано:

0: 6 1: 5 2: 3 3 :2 4 :1//Пример 2" многомерный массив function cmp ($а. $b) { return stranp($a["fruit"],$b["fruit"]); } $fruits[0]["fruit"] - "lemons"; $fruits[l]L"fruit"l = "apoles": $fruits[2]["frun"] - "grapes": usort($Truits. "cmp"); while (list ($key, Svalue) = each (Sfruits)) { echo "\$fruits[$key]: " . $value["fruit"] . "\n": }

При сортировке многомерных массивов $а и $b содержит ссылки иа первый индекс массива.

Напечатано будет:

fruits[0]. apples Sfruitsfl]: grapes Ifnnts!.?]: lemons:

См. также: uasort(), uksort(), sort(), asort(), arsort(). ksort(), natsort() и rsort().

array_ multisort

Сортировка релятивных массивов

boo! array_mu1tisort (array arl [, mixed ol [, mixed rl ... [. array -..]]])

Сортирует многомерные массивы (один или более) с сохранением индексной ассоциации, возвращая TRUE при отсутствии ошибок.

Исходные массивы рассматриваются как столбцы таблицы, сортируемой построчно. Поэтому массивы должны иметь одинаковое число элементов, и взаимосвязь между ними, как в строках таблицы, сохраняется! Приоритетом сортировки пользуются первые массивы. Флаги сортиро.'жи могут указываться для каждого массива, и их действие распространяется только на тот массив, после которого они указаны.

Флаги определения порядка сортировки (аргументы ох):

  • SORT_ASC — сортировка в порядке возрастания (по умолчанию);
  • SORT_DESC - сортировка в порядке убывания.

Флаги типа сортировки (аргументы тх):

  • SORT_REGULAR — сравнивать элементы как есть (по умолчанию);
  • SORT_NUMERIC — сравнивать элементы как числа;
  • SORT_STRING — сравнивать элементы как строки.

// Пример 1 $arl - array ("10". 100. 100. "а"). $аг2 = array (1. 3. "2". 1): arrayjnultisort ($arl. $ar2), //$arl = array ("10". "a". 100. 100) //$ar2 = array (1. 1. "2". 3)

Элементы второго массива, соответствующие одинаковым элементам (100 и 100) первого массива, также отсортированы.

// Пример 2 $ar = array (array ("10". 100. 100. "a"), array (1. 3. "2". D): anrayjiultisort ($ar[0]. SORT_ASC. SORT_STRING. $ar[l]. SORT_NUMERIC. SORT_DESC); $ar[0] = ("10", 100, 100, "a") — сортируются как строки по возрастанию, $аг[1] = (1, 3, "2", 1) — сортируются как числа по убыванию.









Начало    Назад    Вперед