【发布时间】:2009-03-06 22:33:22
【问题描述】:
假设您有一个包含 10 个元素的索引数组,并且您想在中间的某个位置放置一个元素(例如索引 3)。然后我想让数组的其余部分移位,因此长度为 11 个元素。有没有简单的方法可以做到这一点?
我很惊讶没有 put() 函数或其他东西。
我知道结合使用 array_splice 和 array_merge 会很容易做到这一点,但我只是想知道是否有更简单的方法。
【问题讨论】:
假设您有一个包含 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
)
如果位置大于数组,插入不是数组等,您可能可以添加检查。
【讨论】: