PHP从数组中添加一个项目

5

假设我有这个数组:

$array = (1,2,4,5);

现在,我该如何在上述数组中正确的位置 索引/键值 方式添加缺失的 3 呢?
6个回答

9

尝试:

array_splice($array, 2 /*offset*/, 0 /*length*/, 3 /*value*/);

请注意,这将重新排列输入数组的键从0到n-1。
(编辑:在这种情况下,返回值未被使用。)

是的,我已经纠正了我的答案。它返回被提取出来的元素,但在这种情况下没有任何元素被提取出来。它通过引用修改了原始输入数组。 - Matthew
konforence,-1变成+1 ;) - Harmen

6
array_merge(array_slice($array,0,2),array(3),array_slice($array,2))

4
也许我误解了你的问题的复杂性,但是下面的内容不正是你想要的吗?
$array[] = 3;
sort($array);

2
function insertMissingIntoArray($values = array(), $valueIncrement = 1) {
    $lastValue = 0;
    foreach ($values as $key=>$val) {
        if ($key != 0) {
            if ($val != $lastValue + $valueIncrement) {
                array_splice($values, $key, 0, $val);
            }
            $lastValue = $val;
        }
    }
    return $values;
}

使用方法如下:

$values = array(1,2,4,5,7,9);
$fixedValues = insertMissingIntoArray($values, 1);
// $fixedValues now is (1,2,3,4,5,6,7,8,9)

2
最后但并非最不重要的:
  1. 将新内容追加到数组的末尾
  2. 当你最终需要时,对数组进行排序:asort()

1
function array_insert($array,$pos,$val)
{
    $array2 = array_splice($array,$pos);
    $array[] = $val;
    $array = array_merge($array,$array2);

    return $array;
}

用法:

array_insert($a,2,3);

1
你实际上已经重建了 array_splice() - Harmen
这就是为什么PHP中有这么多数组函数的原因:编写自己的函数通常比阅读手册中内置函数的微妙之处更快 :) - Álvaro González
哇,我们每天都会学到新东西。谢谢 @Harmen 的指引 :) +1 - tpae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接