Задача
Необходимо модифицировать длину массива, сделав его больше или меньше текущей длины.
Решение
Для расширения массива применяется функция array_pad():
// начинаем с трех
$array = array('apple', 'banana', 'coconut');
// увеличиваем до пяти
$array = array_pad($array, 5, '');
Теперь значение функции count($array) равно 5, а последние два элемента содержат пустые строки.
Чтобы сократить массив, можно использовать функцию array_splice():
// нет присваивания массиву $array
array_splice($array, 2);
Из массива $array удаляется все, за исключением двух элементов.
Обсуждение
Размер массивов в PHP заранее не объявляется, поэтому можно менять его по ходу дела.
Для заполнения массива используйте функцию array_pad(). В качестве первого аргумента выступает сам заполняемый массив. Следующий аргумент – это размер и направление заполнения. Для заполнения массива вправо используйте положительное число; для заполнения массива влево используйте отрицательное число. Третий аргумент – это значение, присваиваемое вновь созданным элементам. Функция возвращает модифицированный массив и не затрагивает исходный.
Ниже приведено несколько примеров:
// создаем четырехэлементный массив со значением 'dates' справа
$array = array('apple', 'banana', 'coconut');
$array = array_pad($array, 4, 'dates');
print_r($array);
Array
(
[0] => apple
=> banana
=> coconut
=> dates
)
// создаем шестиэлементный массив со значением 'zucchinis' слева
$array = array_pad($array, -6, 'zucchini');
print_r($array);
Array
(
[0] => zucchini
=> zucchini
=> apple
=> banana
=> coconut
=> dates
)
Будьте внимательны. Выражение array_pad($array, 4, 'dates') обеспечивает длину массива, по крайней мере, равную 4, а не добавляет 4 новых элемента. В этом случае, если массив $array уже содержал четыре или больше элементов, то функция array_pad() возвратит неизмененный массив $array.
Также, если объявить значение для четвертого элемента, $array:
$array = array('apple', 'banana', 'coconut');
$array = 'dates';
то в результате получится четырехэлементный массив с индексами 0,
1, 2, and 4:
Array
(
[0] => apple
=> banana
=> coconut
=> dates
)
По существу, PHP превращает его в ассоциативный массив, который, оказывается, имеет целочисленные ключи.Функция array_splice(), в противоположность функции array_pad(), изменяет исходный массив с одной или с другой стороны. Она возвращает полученный после наложения изменения массив. Вот почему массиву $array не присваивается значение. Однако, как и в случае с функцией array_pad(), можно применить наложение справа или слева. Поэтому вызов функции array_splice() со значением –2 удалит два эле-
мента с конца:
// создаем четырехэлементный массив
$array = array('apple', 'banana', 'coconut', 'dates');
// сокращаем до трех элементов
array_splice($array, 3);
// удаляем последний элемент, эквивалентно вызову функции array_pop()
array_splice($array, -1);
// единственные оставшиеся фрукты – это яблоко и банан
print_r($array);
Array
(
[0] => apple
=> banana
)