关于PHP函数array_splice()的完善
PHP函数array_splice()的用法和不足
array_splice() 函数用于从数组中移除选定的元素,并用新元素取代它。函数会返回调整元素后的数组。
array_splice()用法
函数参数:array_splice(array,start,length,array)
- array :必需。需调整的数组。
- start:必需。数值。规定删除元素的开始位置。 0 = 第一个元素。
- length:可选。数值。规定被移除的元素个数,也是被返回数组的长度。
- array:可选。规定带有要插入原始数组中元素的数组。
array_splice()不足
数组的KEY只能是整数,如果KEY是字符串,会被替换成从0开始的递增整数。如下例所示:
<?php
$a1=array("A"=>"red","B"=>"green");
$a2=array("C"=>"purple","D"=>"orange");
array_splice($a1,1,0,$a2);
print_r($a1);
?>
运行结果如下(注意看第0、第1个元素的KEY,由原来的A、B变成了0和1):
Array
(
[0] => purple
[1] => orange
[c] => blue
[d] => yellow
)
完善方案:把数组KEY取出保存再处理
/**
* 数组替换添加删除函数array_splice的完善,可保留字符键值
* @param $input 目标数组
* @param $offset 目标在目标数组中的位置(第几个)
* @param $length 位置后几个受影响
* @param $replacement 入组的数据
* @return array
*/
function array_splice_assoc(&$input, $offset, $length, $replacement = array()) {
$replacement = (array) $replacement;
$key_indices = array_flip(array_keys($input));
if (isset($input[$offset]) && is_string($offset)) {
$offset = $key_indices[$offset];
}
if (isset($input[$length]) && is_string($length)) {
$length = $key_indices[$length] - $offset;
}
$input = array_slice($input, 0, $offset, TRUE)
+ $replacement
+ array_slice($input, $offset + $length, NULL, TRUE);
}
如下例代码所示:
<?php
$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"purple","d"=>"orange");
array_splice_assoc($a1,0,2,$a2);
print_r($a1);
?>
看到输出如下,可使用字符串键值
Array
(
[a] => purple
[b] => orange
[c] => blue
[d] => yellow
)