假设您有一个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