【问题标题】:Add key/value pair in between two pairs in an array在数组的两对之间添加键/值对
【发布时间】:2014-09-25 06:37:55
【问题描述】:

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

我有一个带有连续数字键的数组

例子:

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

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

例子:

我需要在 12 这样的键之间添加 [a] => value a

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

我已经想做的事,但似乎还有很长的路要走

  • 将我的数组一分为二,将我的键/值对添加到第一个切片的后面,然后将我的 2 个切片重新组合成一个数组

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

    李>

对实现此目的的快速清洁方法的任何建议

【问题讨论】:

  • 选项1似乎还可以,切片,合并,合并,我看到的唯一问题是发生碰撞时
  • 不,我会确保在我的新键/值对中保持键的唯一性

标签: php arrays


【解决方案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);

【讨论】:

  • 在 wordpress 中,我必须在两个特定段落之间添加内容。所以我已经把内容分成了段落,并且已经确定了额外的内容应该去哪里。现在只需添加该内容即可:-)。今天下午将测试您的解决方案。 +1 为您的解决方案。谢谢
【解决方案2】:

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

$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:对于keys是固定的,但是如果keys不需要保存的话

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
  • 钥匙丢了,会修的)
  • 不,那是完美的,保持原样。这实际上会救我,因为我需要将键重置为数值
  • @PieterGoosen 修复它,保留密钥
  • 很遗憾,我无法回滚您的更改,但您的原始方法非常完美。请注意回滚您的更改。我的想法是在插入新的键/值对后重置键。
【解决方案3】:

这是我的方法的伪代码(这是用 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

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

【讨论】:

  • 是的,它很长。并且数组的长度永远不会相同,它可以有 3 个键/值对或 50
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 2014-07-29
  • 1970-01-01
  • 2016-06-25
  • 2014-07-09
  • 1970-01-01
相关资源
最近更新 更多