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
修改我的新key/value对为1
后,以某种方式将每个key向前推进一个,然后将其添加到数组的后面,然后使用我的数组[2]=>value a
任何关于实现这一点的快速干净方法的建议,这里是我的方法的伪代码(这是用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);
}