Какой простой способ поместить элемент в середине массива PHP?
Вопрос
Скажем, у вас есть индексированный массив из 10 элементов, и вы хотите поместить элемент где-то посередине (скажем, индекс 3). Затем я хочу, чтобы оставшаяся часть массива сместилась и, следовательно, имела длину 11 элементов. Есть ли простой способ сделать это?
Я удивлен, что нет функции put ()
или чего-то в этом роде.
Я знаю, что было бы достаточно легко сделать это с помощью комбинации array_splice
и array_merge
, но мне было просто интересно, есть ли более простой способ.
Решение
$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green", "blue", "purple", "yellow");
Другие советы
К сожалению, ваш лучший выбор - это то, что вы описали в своем посте.
Если вы используете array_splice (), PHP все равно придется скопировать половину массива, чтобы выполнить вставку, что приведет к снижению производительности для больших массивов. Может быть, вы должны использовать список или древовидную структуру данных? Р>
Единственный раз, когда мне нужно было вставлять в середину массива, это когда я выполнял какую-то операцию, которая в значительной степени похожа на сортировку вставкой. Может быть, вы хотите сохранить несортированные элементы в массиве, а затем отсортировать их, как только вы добавите их все?
В настоящее время ни одна функция PHP не может справиться с этим. Тем не менее, это не так сложно, чтобы взбить свои собственные:
function array_insert(&$array, $insert, $position) {
$c = count($array);
$slice = array_merge($insert, array_slice($array, $position));
array_splice($array, $position, $c, $slice);
}
$array = array('a','b','d','e');
print_r($array);
array_insert($array, array('c'), 2);
print_r($array);
Результатом будет
Array
(
[0] => a
[1] => b
[2] => d
[3] => e
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
)
Вероятно, вы можете добавить проверки, если позиция больше массива, вставка не является массивом и т. д.