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

StackOverflow https://stackoverflow.com/questions/620709

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

$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
)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top