Войти или зарегистрироваться




Массивы в PHP. Последний урок

 

Я думаю, что предыдущие уроки работы с массивами вы прошли и уже думаете, когда же они закончатся. Конечно же, несмотря на довольно серьёзный объём, такое многообразие возможностей в PHP будет полезно, не в первых ваших скриптах, так со временем. Последний урок  по работе с массивами и последние функции для изучения.

Strtr

  • Strtr - Комплексная замена в строке.
  • Синтаксис: string strtr(string str, string from, string to), string strtr(string str, array from)

Первый пример синтаксиса вернёт строку, в которой будут заменены все необходимые символы «FROM» на «TO». Если же отправляемый элемент будет длиннее заменяемого – лишние символы просто проигнорируются. Второй пример так же заменяет строки, но при этом функция пытается заменить сначало наибольшие фрагменты исходной строки и не выполняет замену в уже модифицированных частях строки. Таким бразом, теперь мы можем выполнить несколько замен сразу:

$Subs = array(
  "" => "Larry",
  "" => date("d.m.Y")
);
$st="Привет, <name>! Сейчас <time";
echo strtr($st,$Subs);

А вот как можно "отменить" действие функции HtmlSpecialChars():

$Trans=array_flip(get_html_translation_table());
$st=strtr($st, $Trans);

В результате мы из строки, в которой все спецсимволы заменены на их HTML-эквиваленты, получим исходную строку.

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

array_diff

  • array_diff  - Определение исключительного пересечения массивов.
  • Синтаксис: array array_diff(array arr1, array arr2 [, array ...])


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

$arr1 = array("a" => "green", "red", "blue");
$arr2 = array("b" => "green", "yellow", "red");
$result = array_diff($arr1, $arr2);
// $result = array("blue")

 

array_intersect

 

  • array_intersect - Определение включительного пересечения массивов.
  • Синтаксис: array array_intersect(array arr1, array arr2 [, array ...])


Функция array_intersect() возвращает массив, который содержит значения массива arr1, имеющиеся во всех остальных массивах. При этом индексы не сохраняются.

$arr1 = array("a" => "green", "red", "blue");
$arr2 = array("b" => "green", "yellow", "red");
$result = array_intersect($arr1, $arr2);
// $result = array("a" => "green", "red")

 

array_merge

 

  • array_merge - Слияние массивов.
  • Синтаксис: array array_merge(array arr1, array arr2 [, array ...])


Функция array_merge() призвана устранить все недостатки, присущие оператору + для слияния массивов. А именно, она сливает массивы, перечисленные в ее аргументах, в оди большой массив и возвращает результат. Если в массивах встречаются одинаковые ключи, в результат помещается пара ключ=>значение из того массива, который расположен правее в списке аргументов. Однако это не затрагивает числовые ключи: элементы с такими ключами помещаются в конец результирующего массива в любом случае.

$L1=array(10,20,30);
$L2=array(100,200,300);
$L=array_merge($L1, $L2);
// теперь $L===array(10,20,30,100,200,300);

array_merge_recursive

 

  • array_merge_recursive - Объединение сложных массивов.
  • Синтаксис: array array_merge_recursive(array arr1, array arr2 [, array ...])


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

$arr1 = array("color" => array("favorite" =>"red"), 5);
$arr2 = array(10, "color" => array("favorite" =>"green"), "blue");
$result = array_merge_recursive($arr1, $arr2);
// $result = array("color" => array (
//                   "favorite" => array("red", "green"),
//                   "blue"), 5, 10)

 

 

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

array_slice

  • array_slice - Получение части массива.
  • Синтаксис: array array_slice(array arr, int offset [, int len])


Эта функция возвращает часть ассоциативного массива arr, начиная с элемента со смещением (номером) offset от начала и длиной len (если последний параметр не задан, до конца массива).

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

$input = array("a", "b", "c", "e");
$output = array_slice($input, 2);        // "c", "d", "e"
$output = array_slice($input, 2, -1);    // "c", "d"
$output = array_slice($input, -2, 1);    // "d"
$output = array_slice($input, 0, 3);     // "a", "b", "c"

 

array_splice

 

  • array_splice - Удаляет часть массива или заменяет ее частью другого массива.
  • Синтаксис: array array_splice(array arr, int offset [, int len] [, int repl])


Эта функция, также как и array_slice(), возвращает подмассив arr начиная с индекса offset максимальной длины len, но, вместе с тем, она делает и другое полезное действие. А именно, она заменяет только что указанные элементы на то, что находится в массиве repl (или просто удаляет, если repl не указан). Если offset>0, то последовательность будет начинаться с элемента, имеющего позицию offset от начала массива, а если <0, то отсчет производится от конца массива. Надо отметить, что первый элемент имеет нулевую позицию, а последний (-1).
Если указать length>0, то это число возвращаемых в массиве элементов, а если length<0, то это позиция последнего возвращаемого элемента в массиве arr от его конца.

$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 мы можем указать и обычное, строковое значение, а не массив из одного элемента.

Вставка и удаление элементов

array_pad

  • array_pad - Добавляет в массив несколько элементов.
  • Синтаксис: array array_pad(array input, int pad_size, mixed pad_value)


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

$arr = array(12, 10, 4);
$result = array_pad($arr, 5, 0);
// $result = array(12, 10, 4, 0, 0);

$result = array_pad($arr, -7, -1);
// $result = array(-1, -1, -1, -1, 12, 10, 4)

$result = array_pad($arr, 2, "noop");
// не добавит

 

array_pop

 

  • array_pop - Извлекает и удаляет последние элементы массива.
  • Синтаксис: mixed array_pop(array arr);


Функция array_pop() снимает элемент с "вершины" стека (то есть берет последний элемент списка) и возвращает его, удалив после этого его из arr. С помощью этой функции мы можем строить конструкции, напоминающие стек. Если массив arr был пуст, функция возвращает пустую строку.

$stack = array("orange", "apple", "raspberry");
$fruits = array_pop($stack);
// $fruit = "raspberry"
// $stack = array("orange", "apple")

 

array_push

 

  • array_push - Добавляет элементы в конец массива.
  • Синтаксис: int array_push(array arr, mixed var1 [, mixed var2, ..])


Эта функция добавляет к массиву arr элементы var1,var2 и т.д. Она присваивает им числовые индексы - точно так же, как это происходит для стандартных []. Если вам нужно добавить всего один элемент, наверное, проще будет воспользоваться этим оператором:

  • array_push($Arr,1000); // вызываем функцию
  • $Arr[]=100; // то же самое, но короче

Обратите внимание, что функция array_push() воспринимает массив, как стек, и добавляет элементы всегда в его конец.

 

array_shift

 

  • array_shift - Извлекает и удаляет первый элемент массива.
  • Синтаксис: mixed array_shift(array arr)


Эта функция извлекает первый элемент массива arr и возвращает его. Она сильно напоминает array_pop(), но только получает начальный, а не конечный элемент, а также производит довольно сильную "встряску" всего массива: ведь при извлечении первого элемента приходится корректировать все числовые индексы у всех оставшихся элементов, т.к. все последующие элементы массива сдвигаются на одну позицию вперед.

$ar = array("-v", "-f");
$opt = array(_shift($arr);
// теперь $arr = array("-f"), а $opt = "-v"

 

array_unshift

 

  • array_unshift - Добавляет элементы в начало массива.
  • Синтаксис: int array_unshift(list arr, mixed var1 [,mixed var2, ...])


Функция очень похожа на array_push, но добавляет перечисленные элементы не в конец, а в начало массива. При этом порядок следования var1, var2 и т.д. остается тем же, т.е. элементы как бы "вдвигаются" в список слева. Новым элементам списка, как обычно, назначаются числовые индексы, начиная с 0; при этом все ключи старых элементов массива, которые также были числовыми, изменяются (чаще всего они увеличиваются на число вставляемых значений). Функция возвращает новый размер массива.

$A = array(10,"a"=>20,30);
array_unshift($A,"!","?");
// теперь $A===array(0=>"!", 1=>"?", 2=>10, a=>20, 3=>30)

 

array_unique

 

  • array_unique - Создает массив только из уникальных значений.
  • Синтаксис: array array_unique(array arr)


Функция array_unique() возвращает массив, составленный из всех уникальных значений массива arr вместе с их ключами, путем удаления всех дублирующих значений. В результирующий массив помещаются первые встретившиеся пары ключ=>значение. Индексы сохраняются.

$input = array("a" => "green", "red", "b" =>
         "green", "blue", "red");
$result = array_unique($input);
// теперь $result===("a"=>"green", "red", "blue");

 

 

Переменные и массивы

List 

  • List - Заносит элементы массива в переменные.

Синтаксис: list() - языковая конструкция (наподобие array()). Она присваивает перечисленным переменным значения элементов массива, причем первой переменной присваивается первый элемент массива, второй переменной - второй элемент и т.д.

Compact

  • Compact - Упаковывает в массив переменные из текущего контекста.
  • Синтаксис: array compact(mixed varname1 [, mixed $varname2, ...])

Функция compact() упаковывает в массив переменные из текущего контекста (глобального или контекста функции), заданные своими именами в varname1, $varname2 и т.д. При этом в массиве образуются пары с ключами, равными содержимому varnameN, и значениями соответствующих переменных.

Число аргументов может быть неопределенное.

Если в аргументе указано имя несуществующей переменной, он пропускается. Действие этой функции противоположно функции extract().

$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";
$List=array("b",array("c","d"));
$A=compact("a",$List);
// теперь $A===array("a"=>"Test", "b"=>"Text",
          "c"=>"CCC", "d"=>"DDD")


Extract

  • Extract - экспорт элементов массива в переменные.
  • Синтаксис: void extract(array arr [, int extract_type] [, string prefix])

Эта функция производит действия, прямо противоположные compact(). А именно, она получает в параметрах массив arr и превращает каждую его пару ключ=>значение в переменную текущего контекста.

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

По умолчанию подразумевается EXTR_OVERWRITE, т.е. переменные перезаписываются.
// Сделать все переменные окружения глобальными
extract($HTTP_ENV_VARS);

// То же самое, но с префиксом E_
extract($HTTP_ENV_VARS, EXTR_PREFIX_ALL, "E_");
echo $E_COMSPEC;
// Выводит переменную окружения COMSPEC

Параметр prefix имеет смысл указать только тогда, когда вы применяете режимы EXTR_PREFIX_SAME или EXTR_PREFIX_ALL.
« Пред.
 
След. »


Самое популярное


Последние новости


Разделы форума

Все разделы форума

При перепечатке материалов ссылка на источник обязательна.

© Андрей Максимов, 2008-2011

Яндекс цитирования