关于PHP中删除JSON指定元素unset和array_splice的区别

  1. unset(mixed var, mixed ...vars): void

unset 不会改变原有索引顺序


  1. array_splice(

array &$array,

int $offset,

?int $length = null,

mixed $replacement = []

): array

array_splice 删除后,会重新排序索引顺序


假设有以下JSON数据

javascript 复制代码
{"dataRows": [{"id": 1,"val": "a"},{"id": 2,"val": "b"},{"id":3,"val": "c"}]}

一、unset 方法删除只能删除最后一个元素,否则JSON数据格式将会被改变。例如:

  1. 仅删除第1个元素,或第2个元素,但不能是末尾的元素。
php 复制代码
 foreach ($dataRows as $i => $row) {
        if ($row['id'] == 1) {
            unset($dataRows[$i]); // 删除了 {"id": 1,"val": "a"}
        }
    }

结果:{"dataRows": {"0":{"id": 2,"val": "b"},"1":{"id":3,"val": "c"}}}

或者:{"dataRows": {"0":{"id": 1,"val": "a"},"1":{"id":3,"val": "c"}}}

注意,数组中的方括号"dataRows":[...]变成了花括号"dataRows":{...},程序给每行元素前自动增加了一个索引号。

  1. 仅删除最后一个元素
php 复制代码
 foreach ($dataRows as $i => $row) {
        if ($row['id'] == 2) {
            unset($dataRows[$i]);
        }
    }

结果:{"dataRows": [{"id": 1,"val": "a"},{"id": 2,"val": "b"}]}

注意,数组中的方括号"dataRows":[...]没有改变


二、array_splice 方法可以删除任意行元素,JSON数据格式都不会被改变。例如:

php 复制代码
 foreach ($dataRows as $i => $row) {
        if ($row['id'] == 1) {
            array_splice($dataRows, $i, 1);
        }
    }

结果:{"dataRows": [{"id": 2,"val": "b"},{"id":3,"val": "c"}]}
注意,数组中的方括号"dataRows":[...]没有改变


总结:为了保证JSON数据格式统一,尽量使用 array_splice 方法删除JSON元素。

当JSON数组中的方括号"dataRows":[...]变成了花括号"dataRows":{...}后,获取记录集总数需要用:Object.keys(dataRows).length,否则返回 undefined。

为了兼容不同JSON数据格式,使用如下语句即可:

php 复制代码
var recordCount = dataRows.length || Object.keys(dataRows).length;
相关推荐
沐欣工作室_lvyiyi11 分钟前
基于Matlab的简易振动信号分析系统(论文+仿真)
开发语言·matlab·毕业设计·振动信号分析
liu****3 小时前
1.模拟算法
开发语言·c++·算法·1024程序员节
数据村的古老师3 小时前
Python数据分析实战:基于25年黄金价格数据的特征提取与算法应用【数据集可下载】
开发语言·python·数据分析
孔明兴汉3 小时前
第一章-第三节-Java开发环境配置
java·开发语言
小王不爱笑1324 小时前
Java 核心知识点查漏补缺(一)
java·开发语言·python
空空kkk4 小时前
Java——类和对象
java·开发语言
沐知全栈开发5 小时前
Python3 集合
开发语言
Jonathan Star6 小时前
用Python轻松提取视频音频并去除静音片段
开发语言·python·音视频
Evand J6 小时前
【自适应粒子滤波MATLAB例程】Sage Husa自适应粒子滤波,用于克服初始Q和R不准确的问题,一维非线性滤波。附下载链接
开发语言·matlab·卡尔曼滤波·自适应滤波·非线性
hd51cc6 小时前
C++ 类的学习(四) 继承
开发语言·c++·学习