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

时间:2014-09-25 06:37:55

标签: php arrays

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

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

示例:

Array
 (
    [0] => value 0
    [1] => value 1
    [2] => value 2
    [3] => value 3
)

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

示例:

我需要在密钥[a] => value a1之间添加2,例如

Array
 (
    [0] => value 0
    [1] => value 1
    [a] => value a
    [2] => value 2
    [3] => value 3
)

我已经做了什么,但似乎还有很长的路要走

  • 将我的数组切成两半,将我的键/值对添加到切片一的背面,然后将我的两个切片重新组合成一个数组

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

任何建议以快速清洁方式实现此目的

3 个答案:

答案 0 :(得分:1)

不知道你为什么会这样做......

    $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);

答案 1 :(得分:1)

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

$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"
}

ps:修复了密钥,但如果没有密钥保存则需要

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);
}

答案 2 :(得分:0)

这是我的方法的伪代码(这是用python编写的,但概念仍然存在)

for key, item in enumerate(array):
  if key == 2:
     thirdKey = array[key]
     array[1] = a
  if key == 3:
     fourthKey = array[key]
     array[2] = thirdKey
  if key == 4:
     array[3] = fourthKey

有点长的方法,但我希望它有所帮助:)