- unset(mixed var, mixed ...vars): void
unset 不会改变原有索引顺序
- 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个元素,或第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":{...},程序给每行元素前自动增加了一个索引号。
- 仅删除最后一个元素
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;