PHP: Добавление и удаление элементов массива
Рассмотрим способы записи значений в массив. Существующий массив может быть изменен явной установкой в нем значений. Это выполняется с помощью присваивания значений массиву.
Операция присваивания значения элементу массива выглядит так же, как операция присваивания значения переменной, за исключением квадратных скобок ([]), которые добавляются после имени переменной массива. В квадратных скобках указывается индекс/ключ элемента. Если индекс/ключ не указан, PHP автоматически выберет наименьший незанятый числовой индекс.
<?php
$my_arr = array( 0 => 'ноль',
1 => 'один');
$my_arr[2] = 'два';
$my_arr[3] = 'три';
var_dump($my_arr);
// присваивание без указания индекса/ключа
$my_arr[] = 'четыре';
$my_arr[] = 'пять';
echo "<br>";
var_dump($my_arr);
?>
Для изменения определенного значения, нужно просто присвоить новое значение уже существующему элементу. Чтобы удалить какой-либо элемент массива с его индексом/ключом или удалить полностью сам массив, используется функция unset():
<?php
$my_arr = array(10, 15, 20);
$my_arr[0] = 'радуга'; // изменяем значение первого элемента
unset($my_arr[1]); // Удаляем полностью второй элемент (ключ/значение) из массива
var_dump($my_arr);
unset($my_arr); // Полностью удаляем массив
?>
Примечание: как уже упоминалось выше, если элемент добавляется в массив без указания ключа, PHP автоматически будет использовать предыдущее наибольшее значение ключа типа integer, увеличенное на 1. Если целочисленных индексов в массиве еще нет, то ключом будет 0 (ноль).
Учтите, что наибольшее целое значение ключа не обязательно существует в массиве в данный момент, такое может быть по причине удаления элементов массива. После того как были удалены элементы, переиндексация массива не происходит. Приведем следующий пример, чтобы стало понятнее:
<?php // Создаем простой массив с числовыми индексами. $my_arr = array(1, 2, 3); print_r($my_arr); // Теперь удаляем все элементы, но сам массив оставляем нетронутым: unset($my_arr[0]); unset($my_arr[1]); unset($my_arr[2]); echo "<br>"; print_r($my_arr); // Добавляем элемент (обратите внимание, что новым ключом будет 3, вместо 0). $my_arr[] = 6; echo "<br>"; print_r($my_arr); // Делаем переиндексацию: $my_arr = array_values($my_arr); $my_arr[] = 7; echo "<br>"; print_r($my_arr); ?>
В этом примере использовались две новые функции, print_r() и array_values(). Функция array_values() возвращает индексированный массив (заново индексирует возвращаемый массив числовыми индексами), а функция print_r работает наподобие var_dump, но выводит массивы в более удобочитаемом виде.
Теперь мы можем рассмотреть третий способ создания массивов:
<?php // следующая запись создает массив $weekdays[] = 'Понедельник'; $weekdays[] = 'Вторник'; // тоже самое, но с указанием индекса $weekdays[0] = 'Понедельник'; $weekdays[1] = 'Вторник'; ?>
В примере был показан третий способ создания массива. Если массив $weekdays еще не был создан, то он будет создан. Однако такой вид создания массива не рекомендуется применять, так как если переменная $weekdays уже была ранее создана и содержит значение, это может привести к неожиданным результатам работы сценария.
Если у вас возникают сомнения по поводу того, является ли переменная массивом, воспользуйтесь функцией is_array. Например, проверку можно выполнить следующим образом:
<?php
$yes = array('это', 'массив');
echo is_array($yes) ? 'Массив' : 'Не массив';
echo '<br>';
$no = 'обычная строка';
echo is_array($no) ? 'Массив' : 'Не массив';
?>
С этой темой смотрят: