Php 在数组中的两对之间添加键/值对

Php 在数组中的两对之间添加键/值对,php,arrays,Php,Arrays,我一直在寻找和思考,但无法找到解决这个问题的可行方案 我有一个带有顺序数字键的数组 例如: 我需要在数组中的两个特定键之间添加一个新的键/值对 例如: 我需要在键1和2之间添加[a]=>值a,如 Array ( [0] => value 0 [1] => value 1 [a] => value a [2] => value 2 [3] => value 3 ) 我已经想过要做什么,但似乎还有很长的路要走 将我的数组分为

我一直在寻找和思考,但无法找到解决这个问题的可行方案

我有一个带有顺序数字键的数组

例如:

我需要在数组中的两个特定键之间添加一个新的键/值对

例如:

我需要在键
1
2
之间添加
[a]=>值a
,如

Array
 (
    [0] => value 0
    [1] => value 1
    [a] => value a
    [2] => value 2
    [3] => value 3
)
我已经想过要做什么,但似乎还有很长的路要走

  • 将我的数组分为两部分,将我的密钥/值对添加到第一部分的后面,然后将我的两个部分重新组合为一个数组

  • 在key
    1
    修改我的新key/value对为
    [2]=>value a
    后,以某种方式将每个key向前推进一个,然后将其添加到数组的后面,然后使用我的数组


任何关于实现这一点的快速干净方法的建议,这里是我的方法的伪代码(这是用python编写的,但概念仍然存在)


这是一个漫长的过程,但我希望它能有所帮助:)

我不知道你为什么要这么做

    $array = array(0=>0,1=>1,2=>2,3=>3);

    $add = array('a'=>'a');

    $before_key = 2;

    $new_array = array();

    foreach($array as $key=>$val) {
        if($key===$before_key) {
            $new_array[key($add)] = $add[key($add)];
        }
        $new_array[$key] = $val;
    }
    $array = $new_array;
    var_dump($array);

我假设原始数组可以是关联的

$ar = array
(
    '0' => 'value 0',
    '1' => 'value 1',
    '2' => 'value 2',
    '3' => 'value 3',
);

var_dump(insertAfter($ar, '1', array('a' => 'a')));

function insertAfter($arr, $key, $piece)
{
   $keys = array_keys($arr);
   $index = array_search($key, $keys);
   if ($index !== false)
      $ar = array_merge(
            array_slice($arr, 0, $index + 1, true),
            $piece, 
            array_slice($arr, $index + 1, null, true));
   return $ar;
 }
结果:

array(5) {
  [0]=>
  string(7) "value 0"
  [1]=>
  string(7) "value 1"
  ["a"]=>
  string(1) "a"
  [2]=>
  string(7) "value 2"
  [3]=>
  string(7) "value 3"
}
注:固定的钥匙,但如果没有必要在钥匙保存然后

function insertAfter($arr, $key, $piece)
{
   $before = array();
   $keys = array_keys($arr);
   $index = array_search($key, $keys);
   if ($index !== false)
       $before = array_splice($arr, 0, $index + 1, $piece);
   return array_merge($before, $arr);
}

选项1看起来不错,切片、合并、合并,我看到的唯一问题是当发生冲突时否,我将确保在新的键/值对中保持键唯一a,它相当长。数组的长度永远不会相同,它可以有3个键/值对或50个在wordpress中,我必须在两个特定段落之间添加内容。所以我已经把内容分成了几个段落,并且已经确定了额外的内容应该放在哪里。现在只需要添加内容:-)。今天下午将测试您的解决方案+1为您的解决方案。谢谢你今天下午要考试+1.为了你的接近,钥匙丢了,我会把它修好的)不,那太好了,照原样走。实际上,这将节省我的时间,因为我需要将按键重置回数字value@PieterGoosen修复了它,关键点是保留的,我不能很不幸地回滚您的更改,但您原来的方法是完美的。请把找的钱退回来。我的想法是在插入新的键/值对后重置键。
array(5) {
  [0]=>
  string(7) "value 0"
  [1]=>
  string(7) "value 1"
  ["a"]=>
  string(1) "a"
  [2]=>
  string(7) "value 2"
  [3]=>
  string(7) "value 3"
}
function insertAfter($arr, $key, $piece)
{
   $before = array();
   $keys = array_keys($arr);
   $index = array_search($key, $keys);
   if ($index !== false)
       $before = array_splice($arr, 0, $index + 1, $piece);
   return array_merge($before, $arr);
}