Как исключить начальный элемент из массива с помощью PHP

Раздел: Операции с данными -> Работа с массивами

Способы удаления первого элемента массива в PHP

При работе с массивами часто возникает необходимость убрать первый элемент. В PHP существует несколько методов, каждый из которых подходит для определённых задач. Рассмотрим основные варианты, их особенности и возможные проблемы.

Какой способ является наиболее эффективным для удаления первого элемента?

array_shift()

Функция array_shift($array) удаляет первый элемент массива и возвращает его значение. После удаления числовые ключи переиндексируются (начиная с 0), ассоциативные ключи сохраняются. Это самый простой и быстрый способ для большинства случаев.

$fruits = ['apple', 'banana', 'cherry'];
$first = array_shift($fruits);
// $first = 'apple'
// $fruits = ['banana', 'cherry']

содержимое массива php (php вывод содержимого массива)

Возможные проблемы:

  • Если массив пуст, возвращается null и генерируется предупреждение E_WARNING в PHP 8+. Рекомендуется проверять массив перед вызовом.
  • После array_shift() сбрасывается внутренний указатель массива (например, если использовался each()).
  • Для больших массивов переиндексация может быть затратной, но на практике разница незаметна.

Как удалить первый элемент, не изменяя исходный массив?

array_slice()

Функция array_slice($array, 1) возвращает новый массив, содержащий все элементы, начиная со второго. Исходный массив остаётся нетронутым. Это удобно, когда нужно сохранить оригинальные данные.

$colors = ['red', 'green', 'blue'];
$withoutFirst = array_slice($colors, 1);
// $withoutFirst = ['green', 'blue']
// $colors = ['red', 'green', 'blue']

массив содержит php (php проверка наличия элемента в массиве)

Особенности:

  • Числовые ключи в новом массиве будут переиндексированы (по умолчанию). Если нужно сохранить ключи, используйте третий параметр true.
  • Для ассоциативных массивов ключи сохраняются автоматически.

Как удалить первый элемент и сохранить числовые ключи без сдвига?

unset() + array_values()

Вызов unset($array[0]) удаляет элемент с ключом 0, но остальные ключи не изменяются. Чтобы переиндексировать массив и сделать ключи последовательными, применяется array_values().

$numbers = [10, 20, 30];
unset($numbers[0]);
// $numbers = [1 => 20, 2 => 30]
$numbers = array_values($numbers);
// $numbers = [20, 30]

Php между значениями (выборка значений массива в диапазоне php)

Когда это полезно:

  • Если массив не обязательно начинается с нулевого индекса, или нужно удалить элемент по конкретному ключу.
  • Комбинация unset и array_values может быть менее производительной, чем array_shift, но даёт гибкость.

Как удалить первый элемент ассоциативного массива, зная его ключ?

key() + unset()

Если массив ассоциативный и нужно удалить первый элемент (по порядку добавления), можно получить ключ первого элемента функцией array_key_first() (PHP 7.3+) или комбинацией reset() и key(), а затем удалить его через unset().

$user = ['name' => 'John', 'age' => 30, 'city' => 'NY'];
$firstKey = array_key_first($user); // 'name'
unset($user[$firstKey]);
// $user = ['age' => 30, 'city' => 'NY']

Php есть ли значение в массиве (поиск значения в массиве php)

Важно:

  • array_key_first() работает только с PHP 7.3 и выше. Для старых версий используйте reset($user); $firstKey = key($user); unset($user[$firstKey]);.
  • Внутренний указатель массива при этом сбрасывается.

Как удалить несколько первых элементов за один раз?

array_splice()

Функция array_splice() может удалять часть массива и заменять её другими элементами. Для удаления первого элемента укажите смещение 0 и длину 1. Можно удалить и больше.

$items = ['a', 'b', 'c', 'd'];
$removed = array_splice($items, 0, 1);
// $removed = ['a']
// $items = ['b', 'c', 'd']

Отличие от array_shift:

  • array_splice() возвращает удалённые элементы в виде массива, а не одно значение.
  • Позволяет одновременно удалить и вставить другие элементы.
  • Числовые ключи переиндексируются.
- Php проверить массив (проверить, является ли переменная массивом в php)
- Php new array (создание массива в php)
- Php array access (доступ к элементам массива в php)

Расширенные примеры и нестандартные ситуации

Пример 1. Удаление первого элемента в цикле (очередь FIFO)

Часто требуется обрабатывать массив как очередь, последовательно извлекая первые элементы. Использование array_shift() в цикле - простой способ, но нужно учитывать, что на каждой итерации массив переиндексируется, что может снижать производительность для больших массивов.

Пример
<?php
$queue = range(1, 100000);
$start = microtime(true);
while ($item = array_shift($queue)) {
    // обработка $item
}
echo 'Время: ' . (microtime(true) - $start) . ' сек';
?>
Время: 0.045 сек (примерное значение)

Альтернатива:

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

Пример 2. Удаление первого элемента из многомерного массива

Если массив вложенный, array_shift() работает так же, удаляя первый элемент верхнего уровня.

Пример
<?php
$matrix = [
    ['x', 'y'],
    [1, 2],
    [3, 4]
];
$firstRow = array_shift($matrix);
// $firstRow = ['x', 'y']
// $matrix = [[1, 2], [3, 4]]
?>
$firstRow: ['x', 'y']
$matrix: [[1, 2], [3, 4]]

Пример 3. Удаление первого элемента с сохранением ассоциативных ключей

Если массив ассоциативный, и требуется удалить элемент по порядку (не по ключу), array_shift() сохраняет остальные ключи.

Пример
<?php
$data = ['one' => 1, 'two' => 2, 'three' => 3];
$removed = array_shift($data);
// $removed = 1
// $data = ['two' => 2, 'three' => 3]
?>
$removed: 1
$data: ['two' => 2, 'three' => 3]

Пример 4. Использование array_slice для получения нового массива без первого элемента с сохранением ключей

Пример
<?php
$indexed = ['a' => 10, 'b' => 20, 'c' => 30];
$sliced = array_slice($indexed, 1, null, true);
// $sliced = ['b' => 20, 'c' => 30]
// Параметр true сохраняет ключи
?>
$sliced: ['b' => 20, 'c' => 30]

Пример 5. Удаление первого элемента с помощью array_splice и вставка нового элемента вместо него

Пример
<?php
$arr = ['first', 'second', 'third'];
$removed = array_splice($arr, 0, 1, ['new_first']);
// $removed = ['first']
// $arr = ['new_first', 'second', 'third']
?>
$removed: ['first']
$arr: ['new_first', 'second', 'third']

Пример 6. Обработка пустого массива и предотвращение ошибок

Пример
<?php
function safeShift(array &$array): mixed
{
    if (empty($array)) {
        return null;
    }
    return array_shift($array);
}

$empty = [];
$result = safeShift($empty); // null, без предупреждения
?>
$result: null

Пример 7. Сравнение производительности array_shift и array_slice для больших массивов

Пример
<?php
$size = 50000;
$arr1 = range(0, $size);
$arr2 = range(0, $size);

$start = microtime(true);
array_shift($arr1);
echo 'array_shift: ' . (microtime(true) - $start) . ' сек\n';

$start = microtime(true);
$arr2 = array_slice($arr2, 1);
echo 'array_slice: ' . (microtime(true) - $start) . ' сек\n';
?>
array_shift: 0.028 сек
array_slice: 0.021 сек

Примечание:

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

php удалить первый элемент массива - comments

En
Php удалить первый элемент массива (php)