引言 接着我们这个系列的文章说 。本文我们聊一聊 PHP 数组,如何在任意位置插入新元素 。因为内置函数并没有提供类似 array_insert(&$array, $pos, $items) 的函数,所以我们试着动手解决 。
学习时间 标准的实现方法,是要用 array_splice,该函数的用法:
array array_splice( array &$input, int $offset[, int $length = 0[, mixed $replacement]] )
把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用其中的单元取代 。
下面是举例说明:
$original = array( \\\'a\\\', \\\'b\\\', \\\'c\\\', \\\'d\\\', \\\'e\\\' );$inserted = array( \\\'x\\\' ); // $inserted 并不必须是数组array_splice( $original, 3, 0, $inserted ); // 在索引 3 位置插入// $original 内容为 a b c x d e
有几个关键点大家需要注意,灵活运用 $offset, $length, $replacement 三个参数,可以组装成强大的功能 。
对于偏移位置 $offset:
如果 offset 为正,则从 input 数组中该值指定的偏移量开始移除 。如果 offset 为负,则从 input 末尾倒数该值指定的偏移量开始移除 。对于替换的长度 $length:
如果省略 length,则移除数组中从 offset 到结尾的所有部分 。如果指定了 length 并且为正值,则移除这么多单元 。如果指定了 length并且为负值,则移除从 offset 到数组末尾倒数length 为止中间所有的单元 。在编程中,当给出了replacement 时要移除从 offset 到数组末尾所有单元时,用 count($input) 作为 length 。比如像下面这个示例:
$input = array("red", "green", "blue", "yellow");array_splice($input, 1, count($input), "orange");// $input = array("red", "orange")
特别需要注意的是 $replacement 参数:
如果给出了 replacement 数组,则被移除的单元被此数组中的单元替代 。如果 offset 和 length 的组合结果是不会移除任何值,则 replacement 数组中的单元将被插入到 offset 指定的位置 。注意替换数组中的键名不保留 。如果用来替换 replacement 只有一个单元,那么不需要给它加上array(),除非该单元本身就是一个数组、一个对象或者 NULL 。亲手造轮子 上一节的解决方案堪称标准 。有些同学还是要忍不住造轮子 。“条条大道通罗马”,肯定有不止一种方式实现需求 。下面是另外一种方式:
$a = array(1, 2, 3, 4);$b = array_merge(array_slice($a, 0, 2), array(5), array_slice($a, 2));// $b = array(1, 2, 5, 3, 4)
使用 array_slice 函数对原数组切片,一分为二,然后使用 array_merge 拼接3个部分 。完美!
上面的代码,在使用 array_merge 后悔丢失原数组的索引关系 。如果要保留,使用连接:
$b = array_slice($a, 0, 2)array(5)array_slice($a, 2);
这样就可以了 。
换汤不换药,如果给类添加一个方法,或者添加一个助手函数,自然是极好的 。下面是封装函数 。
推荐阅读
- 什么东西是世界上最大的动物 哪个动物属于世界第一大
- 目前全球最大的游轮有几层 世界上最大的游轮有多大
- 最大乌龟多重,生活在哪里 世界上最大的乌龟有多大
- 有多少大,长什么样子图片 世界上最大的鲨鱼是什么鲨
- 最厉害的重坦是鼠式坦克 世界上最大的坦克
- 中国最大的薰衣草基地
- 竹节虫是排名第一的昆虫吗 世界上最大的昆虫有多大
- 面积最大的大学排行榜 中国最大的大学是哪个有多大
- 最恐怖的巨型老鼠有多大多重 世界上最大的老鼠
- 排名第一恐龙叫什么名字,有多大多高 世界上最大的恐龙