input位置_3分钟短文 | PHP 数组任意位置插入新元素,你是怎么处理的?
引言
接着我们这个系列的文章说。本文我们聊一聊 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);
这样就可以了。
换汤不换药,如果给类添加一个方法,或者添加一个助手函数,自然是极好的。下面是封装函数。
function array_insert(&$array, $value, $index)
{return $array = array_merge(array_splice($array, max(0, $index - 1)), array($value), $array);
}
写在最后
本文介绍了一个功能丰富的 array_splice 函数,让大家领略了参数的灵活运用所带来的便捷。如果你经常需要这样的操作,麻溜地写到全局助手函数里吧。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
input位置_3分钟短文 | PHP 数组任意位置插入新元素,你是怎么处理的?相关推荐
- 移除数组第一个元素_3分钟短文 | PHP 数组删除元素,忘了foreach吧,有更优雅的方式...
引言 PHP的数组,说白了就是一个映射的键值对集合.那么如何从数组元素中删除元素呢?你肯定首先想到遍历数组,然后找到目标项,然后删除. 我看到有同学将要删除的元素 = null,这并不起作用,因为 n ...
- 接口怎么获取数组底下的数组_3分钟短文 | PHP数组获取最后一个元素,10个方式中哪个有错?...
引言 我们对于 PHP 的数组操作乐此不疲,为什么?因为 PHP 编程你几乎时时刻刻都在于数组打交道,对于数组的操作熟练程度,很大一部分因素关系着代码的优劣. 今天我们来说说,如何获取数组的最后一个元 ...
- php 元素插入数组指定位置,数组任意位置插入元素,删除特定元素的实例
如下所示: $ary = array( array('t'=>1,'y'=>2), array('t'=>2,'y'=>9) ); $t = array_splice( $ar ...
- go 数组任意位置插入数字类型的元素
// 任意位置插入数字类型的元素 // @param slice []int 将指定元素插入的切片 // @param num int 指定元素 // @param index int 插入的指定位置 ...
- C# 数组增加元素_C语言数组——任意位置插入一个元素
前言 接着昨天的话题,我们再来看看向C语言的数组中随机插入一个元素的方法. 如果是在python向列表中随机添加元素,我们往往使用insert()的方法. l insert()的第一个参数是位置,第二 ...
- php 二维数组根据键值合并二维数组_3分钟短文 | PHP 根据值移除数组元素,哪个方法最简单?...
引言 PHP 数组操作,之前我们讲了如何根据值,进行多维数组的排序.今天说一说,如何根据值,进行数组元素的删除. 学习时间 假设有一个一维数组,单纯的数字数组.为了简化问题,我们假设数组元素没有重复项 ...
- laravel $request 多维数组取值_3分钟短文:Laravel的“南天门”,过滤掉七七八八的数据...
引言 上一章我们教会大家如何从用户表单内正确地获取数据,可是没有讲,获取到的数据到底有啥用,或者说,有的用户提交的数据压根儿就没正经填,那些错乱无效的数据,如果直接放到数据库,纯粹是对数据库的污染. ...
- laravel $request 多维数组取值_3分钟短文 | Laravel 内3种数据校验的写法,你喜欢哪一个?...
引言 web应用程序公开访问几乎没有不带用户交互的,难免要接收用户输入的奇奇怪怪的东西.对于后端程序,必须对输入的内容进行有效性过滤. 这就是本文的重点,说一说laravel中输入请求的校验. 学习时 ...
- html尾部代码_3分钟短文:Laravel Form,让你不再写 HTML 的好“库”
引言 作为后端工程师的你,是不是面对一堆JS,CSS感觉无比抓狂.如果能摆脱大量的冗余的HTML代码块, 那该多好啊.laravel作为扩展性极强的框架,自然是为广大后端开发者赋能. 本文我们讲一个简 ...
最新文章
- android 弹幕时间戳,【存档】B站直播数据包分析连载(2018-12-11更新/2020-04-12废止)...
- connect time out 获取token失败_Power Query之获取钉钉日志自动刷新Power BI报告
- Eclipse上GIT插件EGIT使用手册之五_查看历史记录
- hadoop相关随记
- Swift中文教程(七) 闭包
- Think in Java第四版 读书笔记7第13章 字符串
- bat执行java程序的脚本解析
- ios把数据传递到另一个页面_iOS页面跳转及数据传递(三种)
- linux 重启mysql_Grafana+Prometheus 监控 MySql服务
- 怎么在html页面添加qq临时会话
- Python移植MATLAB的巴特沃斯滤波器,椭圆滤波器
- 【C语言】井字棋游戏
- 阿里云和域名怎么备案?
- openCV获取和修改像素值
- java模拟usb接口_Java练习:一个简单的USB接口程序设计
- 2022年Google I/O 大会即将举行,可领取 2022 年 I/O 大会参会开发者资料徽章。
- python 获取项目根目录
- 魔法阵c语言课程设计,魔法阵真的存在吗?
- qgjsfagafgpjqip
- 这6部韩国电影你都看过吗?
热门文章
- 编译安装httpd,并启动之
- 怎样用调用资源管理器explore.exe打开指定的文件夹
- 【论文写作】毕业论文写作的基本流程
- python get sheet_Python模块学习 - openpyxl
- predicate 列存储索引扫描_MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!
- eas库存状态调整单不能反审核_把握 商品 周转,做好 动态 库存 管理
- 农业大学计算机论文,农业大学毕业论文范文
- 基于机器视觉的玻璃Mark点字符识别
- 图像处理系统概述(白皮书)
- 通过HTTP的HEADER完成各种骚操作