PHP: Как добавить элемент в массив после определенного элемента?

PHP: Как добавить элемент массива после указанного элемента?

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

К сожалению, в PHP нет встроенной функции, которая бы позволяла добавлять значение в середину массива. Однако мы можем использовать функцию array_slice(), чтобы разделить массив на две части и добавить новый элемент между ними.

Содержание

  • Примеры
  • Ассоциативный массив
  • Вставка по индексу
  • Вставка после указанного ключа (по имени ключа)
  • Индексированный массив
  • Универсальная функция
  • Примеры использования

Примеры

Ассоциативный массив

Вставка по индексу

Вы можете добавить элемент после указанного индекса. В этом примере мы добавим элемент после второго элемента:

$array = [
    'one'   => 'one value',
    'two'   => 'two value',
    'three' => 'three value',
];

$array = array_slice($array, 0, 2) + ['newKey' => 'newValue'] + $array;

print_r($array);

/*
Array (
    [one]    => one value
    [two]    => two value
    [newKey] => newValue
    [three]  => three value
)
*/

Вставка после указанного ключа (по имени ключа)

Вы также можете указать ключ, после которого нужно добавить новый элемент:

$array = [
    'one'   => 'one value',
    'two'   => 'two value',
    'three' => 'three value',
];

$after_key = 'two';

$index = array_search($after_key, array_keys($array));

$array = array_slice($array, 0, $index + 1) + ['newKey' => 'newValue'] + $array;

print_r($array);

/*
Array(
    [one] => one value
    [two] => two value
    [newKey] => newValue
    [three] => three value
)
*/

Индексированный массив

Если у вас есть индексированный массив, вы можете использовать следующий подход:

$array = [
    'one',
    'two',
    'three',
];

$array = array_merge(
    array_slice($array, 0, 2),
    ['newValue'],
    array_slice($array, 2)
);

print_r($array);
/*
Array (
    [0] => one
    [1] => two
    [2] => newValue
    [3] => three
)
*/

Универсаль��ая функция

Вы также можете создать универсальную функцию для этой задачи:

/**
 * Вставляет массив после указанного ключа в другом массиве.
 *
 * Эта функция ищет заданный ключ в переданном массиве. 
 * Если ключ найден, она вставляет переданный массив сразу после этого ключа.
 * Если ключ не найден, переданный массив добавляется в конец оригинального массива.
 *
 * @param array   $array         Исходный массив, который нужно изменить.
 * @param mixed   $key           Ключ, после которого нужно вставить новый массив.
 * @param array   $insert_array  Массив, который нужно вставить в оригинальный массив.
 *
 * @return void
 */
function array_insert_after_key(&$array, $key, $insert_array) {
    $index = array_search($key, array_keys($array));

    // Если ключ не найден, добавляем в конец массива
    if ($index === false) {
        $array = array_merge($array, $insert_array);
    } 
    // Разделяем массив на две части и вставляем новый элемент между ними
    else {
        $array = array_merge(
            array_slice($array, 0, $index + 1, true),
            $insert_array,
            array_slice($array, $index + 1, null, true)
        );
    }
}

Примеры использования

Ассоциативный массив

Пример 1:

$array = [
    'a' => 1,
    'b' => 2,
    'c' => 3
];

array_insert_after_key($array, 'b', ['newKey' => 'newValue']);

print_r($array);
/*
Array (
    [a] => 1
    [b] => 2
    [newKey] => newValue
     => 3
)
*/

Пример 2:

$array = [
    'a' => 1,
    'b' => 2,
    'c' => 3
];

$insert_array = [
    'newKey'  => 'newValue',
    'newKey2' => 'newValue2',
];

array_insert_after_key($array, 'b', $insert_array);

print_r($array);
/*
Array (
    [a] => 1
    [b] => 2
    [newKey] => newValue
    [newKey2] => newValue2
     => 3
)
*/

Индексированный массив

Пример 1:

$array1 = [
    1,
    2,
    3,
];

array_insert_after_key($array1, 1, ['newValue']);

print_r($array1);
/*
Array (
    [0] => 1
    [1] => 2
    [2] => newValue
    [3] => 3
)
*/

Пример 2:

$array1 = [
    1,
    2,
    3,
];

array_insert_after_key($array1, 1, ['newValue', 'newValue2']);

print_r($array1);
/*
Array (
    [0] => 1
    [1] => 2
    [2] => newValue
    [3] => newValue2
    [4] => 3
)
*/

Теперь вы знаете, как добавлять элементы в массивы на PHP!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *