假设您有一个10元素的索引数组,并且您希望将元素放在中间的某个位置(比如索引3)。然后我想让数组的其余部分移位,因此长11个元素。有一个简单的方法吗?
我很惊讶没有put()
功能或其他东西。
我知道使用array_splice
和array_merge
的组合很容易做到这一点,但我只是想知道是否有更简单的方法。
答案 0 :(得分:11)
$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green", "blue", "purple", "yellow");
答案 1 :(得分:2)
不幸的是,您最好的选择就是您在帖子中描述的内容。
答案 2 :(得分:2)
如果使用array_splice(),PHP仍然需要复制一半数组来执行插入操作,这对于大数组大小来说将是性能损失。也许您应该使用列表或树数据结构?
我唯一需要插入到数组中间的时候是我正在做一些与插入排序基本类似的操作。也许您希望将未排序的项目存储在数组中,然后在将它们全部添加后对它们进行排序?
答案 3 :(得分:1)
目前没有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
)
如果位置大于数组,插入不是数组等,您可以添加检查。