我有数组
array (
a => "1",
b => "2",
c => "3"
)
如果我在"b"处插入"4"。位置b处的旧值移动到位置"c"。并且位置c处的旧值被移动到位置"d"。
注意插入值时自动创建位置"d"。如果数组中的键是a、b、c、d、e、f、g,当在数组中插入值时,它会自动创建位置"h"
所以结果是:
array (
a => "1",
b => "4",
c => "2",
d => "3"
)
我该怎么办?或者有一些建议
这里是使用array_keys
、array_search
和array_slice
函数的addToStack
函数:
$arr = array(
'a' => "1",
'b' => "2",
'c' => "3"
);
/**
* Inserts a new element to stack with offset
* @param $arr the initial array passed by reference
* @param $pos string key (position)
* @param $value inserted value
*/
function addToStack(&$arr, $pos, $value) {
$keys = array_keys($arr);
$offset = array_search($pos, $keys);
$rest = array_slice($arr, $offset);
$arr[$pos] = $value;
foreach ($rest as $v) {
$arr[++$pos] = $v;
}
}
addToStack($arr, 'b', '4');
print_r($arr);
输出:
Array
(
[a] => 1
[b] => 4
[c] => 2
[d] => 3
)
这个技巧可能会对您有所帮助。
首先,您需要使用array
、key
和value
来调用函数。在函数中,首先检查键是否存在。如果键存在,则存储值,现在用键和值在数组中设置值,使用end
函数找到最后一个键,然后用一增加值以获得下一个字符,如果键不存在,则在不存储值的情况下也一样。
$arr = array (
'a' => "1",
'b' => "2",
'c' => "3"
);
function array_push_user($arr, $key, $val){
$store = '';
$bk = '';
if(array_key_exists($key, $arr)){
foreach($arr as $keys => $vals){
if($keys == $key){
$store = $val;
$bk = $vals;
$lst = $keys;
}else{
if($bk != ""){
$store = $bk;
$bk = $vals;
}
else
$store = $vals;
$lst = $keys;
}
$arr[$lst] = $store;
}
$arr[chr(ord($lst)+1)] = $bk;
}else{
end($arr);
$lst = key($arr);
$arr[chr(ord($lst)+1)] = $val;
}
return $arr;
}
$ret_arr = array_push_user($arr, 'b', '4');
echo '<pre>';
print_r($ret_arr);
结果
Array
(
[a] => 1
[b] => 4
[c] => 2
[d] => 3
)