关于PHP函数array_splice()的完善

PHP函数array_splice()的用法和不足

array_splice() 函数用于从数组中移除选定的元素,并用新元素取代它。函数会返回调整元素后的数组。

array_splice()用法

函数参数:array_splice(array,start,length,array)

  1. array :必需。需调整的数组。
  2. start:必需。数值。规定删除元素的开始位置。 0 = 第一个元素。
  3. length:可选。数值。规定被移除的元素个数,也是被返回数组的长度。
  4. 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
)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值