Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vtoraya_chast_uchebnika_po_WWW_Okonchat_variant...doc
Скачиваний:
31
Добавлен:
27.09.2019
Размер:
6.06 Mб
Скачать

Extract (имя_массива)

Для успешной работы данной функции требуется, чтобы индексами массива были строки, которые являются корректными названиями переменных в языке. В частности, нельзя использовать в строковых индексах русские буквы.

в). Разделение массивов – функция array_slice

Позволяет сформировать новый массив из входного массива, который передаётся в функцию как входной аргумент. Оригинальный массив остаётся без изменений. Аргументов у функции четыре:

  1. исходный массив;

  2. смещение (позиция)– номер первого элемента исходного массива N (начиная с нуля), с которого начнётся передача элементов в новый массив;

  3. длина создаваемого нового массива L (число элементов в возвращаемом массиве).

  4. TRUEобеспечивает сохранение индексов исходного массива в элементах вырезанного массива или FALSEне сохраняет индексов. Значение FALSE подразумевается по умолчанию.

Синтаксис использования функции:

имя_нов_массива = array_slice(имя_исх_массива, N, [L], [TRUE])

Значения N и L могут быть положительными или отрицательными целыми числами, а также равными нулю.

Если N>=0, то для разных значений L работают следующие правила:

  • Если длина L не задана вообще, то в новый массив передастся вырезка из исходного значения, начиная с элемента под номером N и до его конца. Такое функционирование может быть удобно в том случае, если вы не знаете размеров оригинального массива.

  • Если длина L задана отрицательным числом, то выборка прекратится за пределом данного числа элементов до конца исходного массива.

Если N<0, то начальный элемент будет отсчитываться от конца исходного массива. Работу функции при различных значениях длины L в этом случае можно сформулировать самостоятельно.

$directors = array( "Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang" );

// Выводит "Array ([0] => Stanley Kubrick [1] => Martin Scorsese )"

print_r( array_slice( $directors, 1, 2 ) );

В приведённом выше коде первоначально создаётся массив с 4-мя элементами (имена режиссёров), а затем используется функция array_slice() для извлечения второго и третьего элементов.

Заметьте, что позиция элемента в массиве и его индекс не всегда одно и тоже. Например, первый элемент массива всегда имеет позицию 0, но его индекс может быть 414. Индексированные массивы PHP не обязаны иметь последовательные индексы, начинающиеся с ноля (хотя очень часто разработчики устанавливают именно такую нумерацию индекса).

В приведённом выше примере можно заметить, что array_slice() изменила индексы элементов в возвращаемом массиве: Stanley Kubrick получил индекс 0, а Martin Scorsese получил индекс 1. Часто такое функционирование не вызывает никаких проблем, так как важен порядок следования элементов в получаемом массиве, а не их индексы.

Однако иногда необходимо сохранить индексы извлекаемых элементов. Например, индексы могут быть ключами, с помощью которых указываются записи в таблице данных, или они могут быть важными для каких-то других целей. В этом случае вы можете сохранить индексы извлекаемых элементов с помощью передачи в качестве четвёртого аргумента значения true в функцию array_slice(). Например:

print_r( array_slice( $directors, 1, 2, true ) );

Функция array_slice() всегда сохраняет индексы в ассоциированных массивах. Таким образом, нет необходимости передавать значение true в качестве четвёртого аргумента при работе с ассоциированными массивами.

г). Слияние двух или более массивов в один - функция array_merge

Действие функции понятно из определения её функциональности:

имя_нов_массива = array_merge(имя_мас1, имя_мас2, …, [имя_масN])

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

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

Если входные массивы имеют элементы с совпадающими строковыми ключами, то в этом случае на место первого из таких элементов подставится значение последнего, а все остальные элементы будут пропущены. То есть, если в трёх исходных массивах найдутся элементы с одинаковыми строковыми индексами, то в результирующем массиве останется один элемент с этим индексом. Он будет стоять там, где стоял в первом массиве, но его значение будет равно значению соответствующего элемента из третьего входного массива.

Рассмотрим эту особенность на следующем примере:

$array1 = array ("color" => "red", 2, 4);

$array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid", 4);

$result = array_merge ($array1, $array2);

print_r($result);

Результат выполнения данного примера:

Array

(

[color] => green

[0] => 2

[1] => 4

[2] => a

[3] => b

[shape] => trapezoid

[4] => 4

)

При слиянии массивов числовые массивы будут перенумерованы, как это показано в следующем примере:

$array1 = array ("color" => "red", 2, 4);

$array2 = array(1 => "data");

$result = array_merge ($array1, $array2);

print_r($result);

Результат слияния:

Array

(

[color] => red

[0] => 2

[1] => 4

[2] => data

)

Внимание! Поведение функции array_merge() было изменено в PHP 5.

В отличие от PHP 4, в новой версии array_merge() принимает параметры только типа array.

Однако вы можете использовать приведение типов. Для уточнения подробностей рассмотрим следующий пример (Пример 3 -44).