PHP 动态设置数组索引的值
- 一、场景
- 二、规则
- 三、动态给指定索引设置值
- 1、方法一:尝试反转索引,从内向外设置数组的指定索引值(不行,改变了数据结构,其他索引不见,只剩指定的索引了)
- 1)、物流平台1
- (1)、代码
- (2)、打印
- (3)、分析
- 2)、物流平台2
- (1)、代码
- (2)、打印
- (3)、分析
- 3)、总结
- 2、方法二:尝试用把字符串设置为变量,再给变量赋值(不行,不生效)
- 1)、我们以 [ 物流平台1 ] 的数据为例
- 2)、打印
- 3)、分析
- 3、方法三:把需要设置的数组索引数组连接成字符串,用eval() 函数执行(可以)
- 1)、我们以 [ 物流平台1 ] 的数据为例
- 2)、打印
- 3)、分析
- 4)、[ 物流平台2 ] 代码及打印结果
- 四、姊妹篇
一、场景
对接不同的第三方物流单号,极少数情况发货数量不对,需要手动修改数量;但是每个第三方物流接口返回的数据结构是不同的,我们需要自定义一套规则,用来获取到数组索引的值,然后前端修改,修改之后,给该索引的值赋值。
二、规则
- [ 物流平台1 ] 的发货数量位于
express,number
,则需要修改$data['express']['number']
的值,rules 的值为['express', 'number']
; - [ 物流平台2 ] 的发货数量位于
list,express,count
,则需要修改$data['list']['express']['count']
的值,rules 的值为['list', 'express', 'count']
; - 以此类推…
注意:
修改后的数据与修改前的数据结构是一致的(是根据索引给该索引重新赋值;而不是重置数据 只保留数据的索引值),只是发货的数量修改了
三、动态给指定索引设置值
1、方法一:尝试反转索引,从内向外设置数组的指定索引值(不行,改变了数据结构,其他索引不见,只剩指定的索引了)
1)、物流平台1
(1)、代码
public function expressOne() {$data = ['express' => ['no' => 'WLOne123', //物流编号'number' => 1 //发货数量],'other' => '其他信息'];$newValue = '新的值';$rules = ['express', 'number']; //需要设置的索引$rules = array_reverse($rules); //数组反转$ruleCount = count($rules);$info = [];foreach ($rules as $key => $index) {if ($info) {$tempInfo = $info;$info = []; //info重置$info[$index] = $tempInfo;} else {$info[$index] = $newValue;}//如果是最后一个,则给dara索引赋值if (($key+1) == $ruleCount) {$data[$index] = $info[$index];}}// var_export($info);die;var_export($data);die;
}
(2)、打印
array ('express' => array ('number' => '新的值',),'other' => '其他信息',
)
(3)、分析
- 很明显,
express
索引下的其他同级数据不见了
2)、物流平台2
(1)、代码
public function expressTwo() {$data = ['list' => ['express' => ['no' => 'WLTwo123', //物流编号'count' => 1 //发货数量],'other' => '其他信息'],'user' => '用户'];$newValue = '新的值';$rules = ['list', 'express', 'count']; //需要设置的索引$rules = array_reverse($rules); //数组反转$ruleCount = count($rules);$info = [];foreach ($rules as $key => $index) {if ($info) {$tempInfo = $info;$info = []; //info重置$info[$index] = $tempInfo;} else {$info[$index] = $newValue;}//如果是最后一个,则给dara索引赋值if (($key+1) == $ruleCount) {$data[$index] = $info[$index];}}// var_export($info);die;var_export($data);die;
}
(2)、打印
array ('list' => array ('express' => array ('count' => '新的值',),),'user' => '用户',
)
(3)、分析
- 很明显,
list
索引下的其他同级数据不见了
3)、总结
- 很明显,这种方式直接把
$rules
第一个索引下 的其他同级索引
都清空了,这属于重置
操作,而不是修改
操作
2、方法二:尝试用把字符串设置为变量,再给变量赋值(不行,不生效)
1)、我们以 [ 物流平台1 ] 的数据为例
public function expressOne() {$data = ['express' => ['no' => 'WLOne123', //物流编号'number' => 1 //发货数量],'other' => '其他信息'];$newValue = '新的值';$rules = ['express', 'number']; //需要设置的索引$variable = 'data';foreach ($rules as $key => $index) {$variable .= "['{$index}']";}//echo $variable; //打印:data['express']['number']$$variable = $newValue; //这句好像失效了var_export($data);die;
}
2)、打印
array ('express' => array ('no' => 'WLOne123','number' => 1,),'other' => '其他信息',
)
3)、分析
- 把字符串转为变量,并赋值是可以的;但字符串是一个带有索引的数组
data['express']['number']
,好像不太行(待验证
)
3、方法三:把需要设置的数组索引数组连接成字符串,用eval() 函数执行(可以)
1)、我们以 [ 物流平台1 ] 的数据为例
public function expressOne() {$data = ['express' => ['no' => 'WLOne123', //物流编号'number' => 1 //发货数量],'other' => '其他信息'];$newValue = '新的值';$rules = ['express', 'number']; //需要设置的索引$variable = '$data';foreach ($rules as $key => $index) {$variable .= "['{$index}']";}$variable .= "='{$newValue}';";// echo $variable;die; //打印:$data['express']['number']='新的值';eval($variable);var_export($data);die;
}
2)、打印
array ('express' => array ('no' => 'WLOne123','number' => '新的值',),'other' => '其他信息',
)
3)、分析
- 1、把需要设置的数组索引数组连接成字符串,用
eval()
函数执行 - 2、可能的问题:如果这个 $newValue 里
有单双引号
需要特殊处理 - 3、
eval
函数只支持字符串
,如果 $newValue 的值是数组
,则方法三也满足不了~
4)、[ 物流平台2 ] 代码及打印结果
- 代码
public function expressTwo() {$data = ['list' => ['express' => ['no' => 'WLTwo123', //物流编号'count' => 1 //发货数量],'other' => '其他信息'],'user' => '用户'];$newValue = '新的值';$rules = ['list', 'express', 'count']; //需要设置的索引$variable = '$data';foreach ($rules as $key => $index) {$variable .= "['{$index}']";}$variable .= "='{$newValue}';";// echo $variable;die; //打印:$data['express']['number']='新的值';eval($variable);var_export($data);die;
}
- 打印结果
array ('list' => array ('express' => array ('no' => 'WLTwo123','count' => '新的值',),'other' => '其他信息',),'user' => '用户',
)
四、姊妹篇
- PHP 动态获取数组索引的值
PHP 动态设置数组索引的值相关推荐
- 微信小程序 setData动态设置数组中的数据
现在有一组死数据 但是想在使用时动态修改其中的值 在setData中不能直接设置,真想......,算了是这个和谐的社会救了那个工程师. 接下来,我们去征服她! 死数据: //地图上方控件contro ...
- 动态设置html字号,动态设置html的font-size值 (适配文字大小)
PC端 (function () { function setRootFontSize() { let rem, rootWidth; let rootHtml = document.document ...
- CWE-129: Improper Validation of Array Index(数组索引验证不当)
ID: 129 类型:基础 结构:简单 状态:草稿 描述 产品在计算或使用数组索引时使用不受信任的输入,但产品不会验证或错误地验证索引,以确保索引引用数组中的有效位置. 关联视图 与"研究 ...
- 使用GDI+实现动态设置分级断点值
在ArcMap的专题图制作中,我们对Classification并不陌生(如图).这主要是对应于ClassBreak类型的地图渲染而言的.它可以用来动态设置分类的等级数目,而且可以使用鼠标对代表Bre ...
- java bean传索引_Java如何设置bean的索引属性值?
在此示例中,我们显示如何设置索引属性的值.在下面的代码中,我们修改了数组类型的值.我们要改变的第二颜色MyBean的colors属性. 我们以与使用该PropertyUtils.setSimplePr ...
- matlab循环遍历数组_Matlab - 访问for循环中最大值的索引,并使用它从数组中删除值...
我想递归地找到一系列矩阵中的最大值(第8列,具体),然后使用该最大值的索引来设置数组中的所有值,索引最大为NaN的最大索引(对于列14:16) . 很容易找到最大值和索引,但是使用for循环为多个数组 ...
- 前端:JS/20/数组(数组的概念,数组元素,数组索引,数组元素的访问,数组的长度,数组的创建方法,数组的操作,实例:使用数组保存个人信息,实例:求数组所有值的平均值,数组对象的length属性)
数组 1,数组的概念 一组值(或对象)的集合,称为"数组": var arr =[10,20,30,50]; var arr =["张三","男&qu ...
- 微信小程序修改数组中的元素_微信小程序——this.setData()动态修改数组中的某一值...
微信小程序--this.setData()动态修改数组中的某一值S8v编程技术_踩坑日志_进阶指南_无知人生 大家是不是都觉得微信小程序的开发方式和 vue react 这种框架的开发方式很像?S8v ...
- vue修改meta值_vue中动态设置meta标签和title标签的方法
vue中动态设置meta标签和title标签的方法 因为和原生的交互是需要h5这边来提供meta标签的来是来判断要不要显示分享按钮,所有就需要手动设置meta标签,标题和内容 //router内的设置 ...
- 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大
题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax为yyy 解题思路: 首先我们知道权值线段树是 ...
最新文章
- 数论分块 ---- 2020牛客多校第7场H-Dividing[思维+数论分块]
- 什么是类别不平衡?有哪些解决方案?
- 树莓派3上安装kali后的相关配置kali(2)
- Redux 莞式教程 之 简明篇
- json数据格式 python_python中json是什么文件格式
- ITK:生成具有正确面积的结构元素
- 零基础学习java------day11------常用API
- 10_Influxdb+Grafana监控Mysql
- BGP——AS—PATH正则表达式(实列讲解+配置)
- 小学三年级计算机室使用计划,小学计算机室工作计划
- GDC 2012]Epic Games谈在智能手机上制作和台式游戏机同等级的图形游戏的经验
- 令人失望的vb 的范型
- GridView 遍历每一行,两种写法
- iphone越狱-------平刷回越狱前(未越狱)状态
- CTFHub 备份文件下载
- el-amap的使用
- 主Module(app)直接跳转到子Module,子Module跳转到主Module(app)要借助Router
- python模拟登录淘宝直通车_Python实现的淘宝直通车数据抓取(2)
- 萝卜开会直播NO.2 | 换一个十年,感受不一样的世界
- 图片怎么批量压缩?这两个方法有掌握吗
热门文章
- 手动计算均值,方差,协方差,皮尔逊系数
- CodeforcesRound#498 (Div.3)E题Military Problem
- java 子串替换_Java中的多个同时子串替换
- java 图片旋转裁剪_【Java实例】使用Thumbnailator生成缩略图(缩放、旋转、裁剪、水印)...
- 朗逸发动机型号css和ea211的区别,css发动机是ea211吗
- 搜索引擎提交软件_网站如何被搜索引擎快速收录?
- python 算法库安装_Mahotas(Python 计算机视觉、图像处理库)安装
- 接口监控_从零开始入门 K8s | 可观测性:监控与日志
- python123基本统计值计算_基本统计值计算
- protobuf生成java类