如何在特定位置向数组中插入元素?

222

假设我们有两个数组:

$array_1 = array(
  '0' => 'zero',
  '1' => 'one',
  '2' => 'two',
  '3' => 'three',
);

$array_2 = array(
  'zero'  => '0',
  'one'   => '1',
  'two'   => '2',
  'three' => '3',
);

现在,我想要在每个数组的第三个元素之后插入 array('sample_key' => 'sample_value') 。我该如何做?


可能是 在 PHP 中的任何位置插入数组中的新项 的重复。 - Kashyap Kotak
不是重复的问题,这个问题更集中于关联数组,@KashyapKotak - anthony_718
25个回答

0

试试这个 ===

$key_pos=0;
$a1=array("a"=>"red", "b"=>"green", "c"=>"blue", "d"=>"yellow");
$arrkey=array_keys($a1);
array_walk($arrkey,function($val,$key) use(&$key_pos) {
  if($val=='b')
    {
        $key_pos=$key;
    }
  });
$a2=array("e"=>"purple");
$newArray = array_slice($a1, 0, $key_pos, true) + $a2 +
        array_slice($a1, $key_pos, NULL, true);
print_r($newArray);

输出

Array (
      [a] => red
      [e] => purple
      [b] => green
      [c] => blue
      [d] => yellow )

0
我创建了一个函数(PHP 8.1),它允许您将项目插入到关联数组或数字数组中:
function insertItemsToPosition(array $array, string|int $insertAfterPosition, array $itemsToAdd): array
    {
        $insertAfterIndex = array_search($insertAfterPosition, array_keys($array), true);
        if ($insertAfterIndex === false) {
            throw new \UnexpectedValueException(sprintf('You try to insert items to an array after the key "%s", but this key is not existing in given array. Available keys are: %s', $insertAfterPosition, implode(', ', array_keys($array))));
        }

        $itemsBefore = array_slice($array, 0, $insertAfterIndex + 1);
        $itemsAfter = array_slice($array, $insertAfterIndex + 1);

        return $itemsBefore + $itemsToAdd + $itemsAfter;
    }

你的代码使用了四个循环。考虑到使用 foreach 只需要一个循环,这有点过多了。 - Your Common Sense

0
如果您只是想在数组的特定位置插入一个项目(基于@clausvdb的答案),请执行以下操作:
function array_insert($arr, $insert, $position) {
    $i = 0;
    $ret = array();
    foreach ($arr as $key => $value) {
            if ($i == $position) {
                $ret[] = $insert;
            }
            $ret[] = $value;
            $i++;
    }
    return $ret;
}

0

可以通过使用array.splice()来实现。请注意,对于关联数组,array_splice或array_merge不会保留键。因此,使用array_slice并使用'+'运算符来连接两个数组。

更多细节在这里



$array_1 = array(
    '0' => 'zero',
    '1' => 'one',
    '2' => 'two',
    '3' => 'three',
  );
  
  $array_2 = array(
    'zero'  => '0',
    'one'   => '1',
    'two'   => '2',
    'three' => '3',
  );
  $index = 2;
  $finalArray = array_slice($array_1, 0, $index, true) +
                $array2  +
                array_slice($array_2, $index, NULL, true);
print_r($finalArray);
/*
Array
(
    [0] => zero
    [1] => one
    [10] => grapes
    [z] => mangoes
    [two] => 2
    [three] => 3
)
*/





-2

foreach循环期间,您可以插入元素,因为此循环在原始数组的副本上运行,但您必须跟踪插入行数(我在此代码中称之为“膨胀”):

$bloat=0;
foreach ($Lines as $n=>$Line)
    {
    if (MustInsertLineHere($Line))
        {
        array_splice($Lines,$n+$bloat,0,"string to insert");
        ++$bloat;
        }
    }

显然,您可以将这个“膨胀”想法推广到在foreach循环期间处理任意插入和删除。

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