Массивы
Функции работы с данными
🕛 01.11.2006, 13:10
См. также: is_array(), explode(), implode(0, split() и join(). Инициализация массива, добавление/извлечение элементов
array
Создание и инициализация массива
array array ([mixed ...])
Языковая конструкция, возвращающая созданный массив. Индексы в ассоциированных массивах и значения элементов разделяются оператором =>.
Пары Index => value разделяются запятыми, они определяют индекс и значение. Индекс может быть строковым или числовым (но в ассоциированных массивах ведет себя как строковый). Если индекс не указывается, подразумевается по умолчанию подставляемое числовое значение автоинкремента (начиная с 0). Если указываются два элемента с одинаковыми индексами, последний заменяет первый.
Пример 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") ):
Пример 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 )
Пример 3 - одномерный массив.
$firstquarter = arrayd =>
'January'. 'February', 'March');
pnnt_r($firstquarter):
Вывод будет следующим:
Array ( [1] => 'January'
[2] => 'February'
[3] => 'March1 )
См. также 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"):
$ Уупс - нечего добавить
range
Создание массива из диапазона целых чисел
array range (int low. irvt high)
Создает и возвращает массив, содержащий целые числа от наименьшего low до наибольшего high включительно.
$numbers = range (3.6):
// теперь Snumbers = array (3. 4. 5 б)
array_pop
Получение и удаление последних элементов массива
mixed array_pop (array array)
$stack = array ("orange", "apple", "raspberry"):
Sfruit = array_pop (Sstack); // и их осталось двое: "orange", "apple"
// a Sfruit = "raspberry".
См. также: array_push(), array_shift() и array_unshift().
array_ push
Добавление элементов в конец массива
int array_push (array array, mixed var [, mixed ...])
Возвращает новое число элементов в массиве.
Для одного элемента действие эквивалентно $array[] = $var;
$stack = array (1. 2);
$n = array_push (Sstack. "WW". 3):
// $n - 4; Sstack (1. 2. "WW". 3).
См. также: 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
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")
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; } }
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)
Пример алгоритма реализации функции 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 )
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"):
См. также 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
= 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 = 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 =
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) - сортируются как числа по убыванию.