我在PHP中有一个关联数组。
$myarray = array(
"a"=>"News",
"b"=>"Articles",
"c"=>"images"
);
我想在“a”键后插入一些值。这样,数组的结构就变成了
$myarray = array(
"a"=>"News",
"j"=>"Latest News",
"k"=>"Sports News",
"l"=>"Entertainment",
"b"=>"Articles",
"c"=>"images"
);
我如何才能获得此功能。
答案 0 :(得分:2)
这个函数是array_splice
,但是你必须手动完成一些工作,因为它不保存密钥。让我们做到这一点:
function search_and_insert($input, $afterKey, $newItems) {
$keys = array_keys($input);
$insertPosition = array_search($afterKey, $keys);
if ($insertPosition === false) {
return false;
}
++$insertPosition;
$newKeys = array_keys($newItems);
array_splice($keys, $insertPosition, 0, $newKeys);
array_splice($input, $insertPosition, 0, $newItems);
return array_combine($keys, $input);
}
这里的想法是你分别处理键和值,为每个数组拼接一次,然后使用array_combine
来获得最终结果。另一个好主意是使用相同的技术编写可重用的array_splice_assoc
函数,并使用它而不是仅使用一个来执行此特定作业。
用法:
$myarray = array("a"=>"News", "b"=>"Articles", "c"=>"images");
$newItems = array("j"=>"Latest News", "k"=>"Sports News", "l"=>"Entertainment");
$insertAfter = "a";
print_r(search_and_insert($myarray, "a", $newItems));
<强> See it in action 强>
答案 1 :(得分:0)
使用它在数组中的特定键之后插入新的键/值:
function array_insert_after($key, array &$array, $new_key, $new_value) {
if (array_key_exists($key, $array)) {
$new = array();
foreach ($array as $k => $value) {
$new[$k] = $value;
if ($k === $key) {
$new[$new_key] = $new_value;
}
}
return $new;
}
return FALSE;
}
用法:
$array = array("a"=>"News", "b"=>"Articles", "c"=>"images");
array_insert_after("a", $array, "j", "Latest News");
答案 2 :(得分:-1)
使用array_splice
时,不会保留数组键<?php
$myarray = array(
"a"=>"News",
"b"=>"Articles",
"c"=>"images"
);
$newarray = array(
"j"=>"Latest News",
"k"=>"Sports News",
"l"=>"Entertainment");
var_dump($myarray);
array_splice($myarray, 1, 0, $newarray);
var_dump($myarray);
?>
<强>输出强>
array(3) {
["a"]=>
string(4) "News"
["b"]=>
string(8) "Articles"
["c"]=>
string(6) "images"
}
array(6) {
["a"]=>
string(4) "News"
[0]=>
string(11) "Latest News"
[1]=>
string(11) "Sports News"
[2]=>
string(13) "Entertainment"
["b"]=>
string(8) "Articles"
["c"]=>
string(6) "images"
}