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!