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

1. unset(mixed $var, mixed ...$vars): void
unset 不会改变原有索引顺序

-------------------------

2. array_splice(
    array &$array,
    int $offset,
    ?int $length = null,
    mixed $replacement = []
): array
array_splice 删除后,会重新排序索引顺序

-------------------------

假设有以下JSON数据

{"dataRows": [{"id": 1,"val": "a"},{"id": 2,"val": "b"},{"id":3,"val": "c"}]}

-------------------------

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

1. 仅删除第1个元素,或第2个元素,但不能是末尾的元素。
  

 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":{...},程序给每行元素前自动增加了一个索引号。


2. 仅删除最后一个元素
  

 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数据格式都不会被改变。例如:
  

 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数据格式,使用如下语句即可:

var recordCount = dataRows.length || Object.keys(dataRows).length;

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值