我一直在寻找和思考,但无法为这个问题找到可行的解决方案。
我有一个带有顺序数字键的数组
示例:的
Array
(
[0] => value 0
[1] => value 1
[2] => value 2
[3] => value 3
)
我需要在数组中的两个特定键之间添加一个新的键/值对。
示例:的
我需要在密钥[a] => value a
和1
之间添加2
,例如
Array
(
[0] => value 0
[1] => value 1
[a] => value a
[2] => value 2
[3] => value 3
)
我已经做了什么,但似乎还有很长的路要走
将我的数组切成两半,将我的键/值对添加到切片一的背面,然后将我的两个切片重新组合成一个数组
以某种方式在键1
将我的新键/值对修改为[2] => value a
之后将每个键推进一个,将其添加到数组的后面,然后使用我的数组
任何建议以快速清洁方式实现此目的
答案 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
有点长的方法,但我希望它有所帮助:)