Синтаксис php (811590), страница 5
Текст из файла (страница 5)
Пример для функции sort():<?php$A=array("40", "20", "10", "30");sort($A);for($i=0; $i<count($A); $i++) echo "$A[$i]"."<br>";// выводит 10 20 30 40?>Перемешивание списка с помощью функции shuffle()Функция shuffle() "перемешивает" список, переданный ей первым параметром, так, чтобыего значения распределялись случайным образом. Обратите внимание, что, во-первых,изменяется сам массив, а во вторых, ассоциативные массивы восприимаются как списки.Пример:$A=array(10,20,30,40,50);shuffle($A);foreach($A as $v) echo "$v ";Приведенный фрагмент кода выводит числа 10, 20, 30, 40 и 50 в случайном порядке.Выполнив этот фрагмент несколько раз, вы можете обнаружить, что от запуска к запускуочередность следования чисел не изменяется.
Это свойство обусловлено тем, что функцияshuffle() использует стандартный генератор случайных чисел, который перед работойнеобходимо инициализировать припомощи вызова srand().Операции с ключами и значениями массиваarray_flip(array $arr)Функция array_flip() "пробегает" по массиву и меняет местами его ключи и значения.Исходный массив $arr не изменяется, а результирующий массив просто возвращается.Конечно, если в массиве присутствовали несколько элементов с одинаковымизначениями, учитываться будет только последний из них:$A=array("a"=>"aaa", "b"=>"aaa", "c"=>"ccc");$A=array_flip($A);// теперь $A===array("aaa"=>"b", "ccc"=>"c");array_keys(array $arr [,mixed $SearchVal])Функция array_keys() возвращает список, содержащий все ключи массива $arr. Еслизадан необязательный параметр $SearchVal, то она вернет только те ключи, которымсоответствуют значения $SearchVal.Фактически, эта функция с заданным вторым параметром является обратной поотношению к оператору [] — извлечению значения по его ключу.array_values(array $arr)Функция array_values() возвращает список всех значений в ассоциативном массиве $arr.Очевидно, такое действие бесполезно для списков, но иногда оправдано для хэшей.in_array(mixed $val, array $arr)Функция in_array() возвращает true, если элемент со значением $val присутствует вмассиве $arr.Впрочем, если вам часто приходится проделывать эту операцию, подумайте: не лучше либудет воспользоваться ассоциативным массивом и хранить данные в его ключах, а не взначениях? На этом вы можете сильно выиграть в быстродействии.array_count_values(list $List)Функция array_count_values() подсчитывает, сколько раз каждое значение встречается всписке $List, и возвращает ассоциативный массив с ключами — элементами списка изначениями — количеством повторов этих элементов.
Иными словами, функцияarray_count_values() подсчитывает частоту появления значений в списке $List. Пример:$List=array(1, "hello", 1, "world", "hello");array_count_values($array);// возвращает array(1=>2, "hello"=>2, "world"=>1)Фукции для работы с массивами и операции надмассивами (Часть 2)Слияние массивовСлияние (конкатенация) массивов - это операция создания массива, состоящего изэлементов нескольких других массивов. Слияние массивов - это очень опасная операция,поскольку результат слияния подчиняется своей логике, забыв о которой можно потерятьданные. Слияние массивов реализуется при помощи оператора "+" или с помощьюфункции array_merge(). Слияние списков может осуществляться только с помощьюфункции array_merge().Предположим, мы имеем два массива:$A = array("1"=>"Первый", "2"=>"Второй");$B = array("3"=>"Третий", "4"=>"Четвертый");Теперь сольем данные два массива в один массив $C:$C = $A + $B;Оператор "+" для массивов не коммутативен.
Это означает, что $A + $B не равно $B + $A.В результате рассмотренного примера мы получим массив $C следующего вида:"1"=>"Первый", "2"=>"Второй", "3"=>"Третий", "4"=>"Четвертый"А в результате $B + $A мы получим такой массив:"3"=>"Третий", "4"=>"Четвертый", "1"=>"Первый", "2"=>"Второй"При слиянии списков такой метод не работает.
Поясним данный факт на примере:Предположим, у нас есть два массива:$A = array(10,11,12);$B = array(13,14,15);В результате слияния списков $A и $B ( $A + $B ) мы получим: 10,11,12. А это совсем нетот результат, который мы хотели получить... Связано это с тем, что при слиянии списковс одинаковыми индексами в результирующем массиве остается элемент первого массива,причем на том же месте. В таком случае нам необходимо использовать функциюarray_merge()Функция array_merge()Функция array_merge() призвана устранить все недостатки, присущие оператору "+" дляслияния массивов.
А именно, она сливает массивы, перечисленные в ее аргументах, водин большой массив и возвращает результат. Если в массивах встречаются одинаковыеключи, в результат помещается пара ключ=>значение из того массива, которыйрасположен правее в списке аргументов. Однако это не затрагивает числовые ключи:элементы с такими ключами помещаются в конец результирующего массива в любомслучае.Таким образом, с помощью array_merge() мы можем избавиться от всех недостатковоператора "+" для массивов. Вот пример, сливающий два списка в один:$L1=array(100,200,300);$L2=array(400,500,600);$L=array_merge($L1,$L2);// теперь $L===array(100,200,300,400,500,600);Всегда используйте эту функцию, если вам нужно работать именно со списками, а не собычными ассоциативными массивами.Получение части массиваДля получения части массива можно использовать функцию array_slice()array_slice(array $Arr, int $offset [, int $len])Эта функция возвращает часть ассоциативного массива, начиная с пары ключ=>значениясо смещением (номером) $offset от начала и длиной $len (если последний параметр незадан - до конца массива).Параметры $offset и $len задаются по точно таким же правилам, как и аналогичныепараметры в функции substr().
А именно, они могут быть отрицательными (в этом случаеотсчет осуществляется от конца массива), и т. д. Вот несколько примеров:$input = array ("a", "b", "c",$output = array_slice ($input,$output = array_slice ($input,$output = array_slice ($input,$output = array_slice ($input,"d", "e");2); // "c", "d", "e"2, -1); // "c", "d"-2, 1); // "d"0, 3); // "a", "b", "c"Вставка и удаление элементов массивовМы уже знаем несколько операторов, которые отвечают за вставку и удаление элементов.Например, оператор [] (пустые квадратные скобки) добавляет элемент в конец массива,присваивая ему числовой ключ, а оператор Unset() вместе с извлечением по ключуудаляет нужный элемент. Язык PHP поддерживает и многие другие функции, которыеиногда бывает удобно использовать.array_push(alist &$Arr, mixed $var1 [, mixed $var2, …])Эта функция добавляет к списку $Arr элементы $var1, $var2 и т.
д. Она присваивает имчисловые индексы — точно так же, как это происходит для стандарных []. Если вамнужно добавить всего один элемент, наверное, проще и будет воспользоваться этимоператором:array_push($Arr,1000); // вызываем функцию…$Arr[]=100; // то же самое, но корочеОбратите внимание, что функция array_push() воспринимает массив, как стек, идобавляет элементы всегда в его конец.
Она возвращает новое число элементов в массиве.array_pop(list &$Arr)Функция array_pop(), является противоположностью array_push(), снимает элемент с"вершины" стека (то есть берет последний элемент списка) и возвращает его, удалив послеэтого его из $Arr. С помощью этой функции мы можем строить конструкции,напоминающие стек.
Если список $Arr был пуст, функция возвращает пустую строку.array_unshift(list &$Arr, mixed $var1 [, mixed $var2, …])Функция array_unshift очень похожа на array_push(), но добавляет перечисленныеэлементы не в конец, а в начало массива. При этом порядок следования $var1, $var2 и т.д. остается тем же, т. е.
элементы как бы "вдвигаются" в список слева. Новым элементамсписка, как обычно, назначаются числовые индексы, начиная с 0; при этом все ключистарых элементов массива, которые также были числовыми, изменяются (чаще всего ониувеличиваются на число вставляемых значений). Функция возвращает новый размермассива.
Вот пример ее применения:$A=array(10,"a"=>20,30);array_unshift($A,"!","?");// теперь $A===array(0=>"!", 1=>"?", 2=>10, a=>20, 3=>30)mixed array_shift(list &$Arr)Функция mixed array_shift извлекает первый элемент массива $Arr и возвращает его. Онасильно напоминает array_pop(), но только получает начальный, а не конечный элемент, атакже производит довольно сильную "встряску" всего массива: ведь при извлечениипервого элемента приходится корректировать все числовые индексы у всех оставшихсяэлементов…array_unique(array $Arr)Функция array_unique() возвращает массив, составленный из всех уникальных значениймассива $Arr вместе с их ключами.
В результирующий массив помещаются первыевстретившиеся пары ключ=>значение:$input=array("a" => "green", "red", "b" => "green", "blue", "red");$result=array_unique($input);// теперь $result===array("a"=>"green", "red", "blue");array_splice(array &$Arr, int $offset [, int $len] [, int $Repl])Функция array_splice, также как и array_slice(), возвращает подмассив $Arr, начиная синдекса $offset максимальной длины $len, но, вместе с тем, она делает и другое полезноедействие. А именно, она заменяет только что указанные элементы на то, что находится вмассиве $Repl (или просто удаляет, если $Repl не указан). Параметры $offset и $lenзадаются так же, как и в функции substr() — а именно, они могут быть и отрицательными,в этом случае отсчет начинается от конца массива.
Вот некоторые примеры:<?php$input=array("red", "green", "blue", "yellow");array_splice($input,2);// Теперь $input===array("red", "green")array_splice($input,1,-1);// Теперь $input===array("red", "yellow")array_splice($input, -1, 1, array("black", "maroon"));// Теперь $input===array("red", "green", "blue", "black", "maroon")array_splice($input, 1, count($input), "orange");// Теперь $input===array("red", "orange")?>Последний пример показывает, что в качестве параметра $Repl мы можем указать иобычное, строковое значение, а не массив из одного элемента.Переменные и массивыcompact(mixed $vn1 [, mixed $vn2, …])Функция compact() упаковывает в массив переменные из текущего контекста(глобального или контекста функции), заданные своими именами в $vn1, $vn2 и т.
д. Приэтом в массиве образуются пары с ключами, равными содержимому $vnN, и значениямисоответствующих переменных. Вот пример использования этой функции:$a="Test string";$b="Some text";$A=compact("a","b");// теперь $A===array("a"=>"Test string", "b"=>"Some text")Почему же тогда параметры функции обозначены как mixed? Дело в том, что они могутбыть не только строками, но и списками строк. В этом случае функция последовательноперебирает все элементы этого списка, и упаковывает те переменные из текущегоконтекста, имена которых она встретила.
Более того — эти списки могут, в свою очередь,также содержать списки строк, и т. д. Правда, последнее используется сравнительноредко, но все же вот пример:$a="Test";$b="Text";$c="CCC";$d="DDD";$Lst=array("b",array("c","d"));$A=compact("a",$Lst);// теперь $A===array("a"=>"Test", "b"=>"Text", "c"=>"CCC", "d"=>"DDD")extract(array $Arr [, int $type] [, string $prefix])Функция extract() производит действия, прямо противоположные compact().