Какой простой способ поместить элемент в середине массива PHP? - PullRequest
0 голосов
/ 07 марта 2009

Скажем, у вас есть индексированный массив из 10 элементов, и вы хотите поместить элемент где-то посередине (скажем, индекс 3). Затем я хочу, чтобы оставшаяся часть массива сместилась и, следовательно, имела длину 11 элементов. Есть ли простой способ сделать это?

Я удивлен, что нет функции put() или чего-то еще.

Я знаю, что было бы достаточно легко сделать это с комбинацией array_splice и array_merge, но мне было просто интересно, есть ли более простой способ.

Ответы [ 4 ]

11 голосов
/ 07 марта 2009

array_splice () делает это

$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green", "blue", "purple", "yellow");
2 голосов
/ 07 марта 2009

Если вы используете array_splice (), PHP все равно придется скопировать половину массива, чтобы выполнить вставку, что приведет к снижению производительности для больших массивов. Может быть, вы должны использовать список или древовидную структуру данных?

Единственный раз, когда мне нужно было вставлять в середину массива, это когда я выполнял какую-то операцию, которая в значительной степени похожа на сортировку вставкой. Может быть, вы хотите сохранить несортированные элементы в массиве, а затем отсортировать их, как только вы добавите их все?

2 голосов
/ 07 марта 2009

К сожалению, ваш лучший выбор - это то, что вы описали в своем посте.

1 голос
/ 07 марта 2009

Никакая 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
)

Возможно, вы можете добавить проверки, если позиция больше массива, вставка не является массивом и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...