后端人员写接口时候,经常会对数组进行条件过滤,当数组被unset数据后,用json_encode格式化时会带有下标

$scoreData=[
    ['uid'=>'1001','name'=>'张三','score'=>'80'],
    ['uid'=>'1002','name'=>'李四','score'=>'59'],
    ['uid'=>'1003','name'=>'王五','score'=>'74'],
    ['uid'=>'1004','name'=>'李六','score'=>'93'],
];
foreach($scoreData as $k=>$v) {
    if ($v['score'] < 60) {
        unset($scoreData[$k]);
    }
}
echo json_encode($scoreData);

返回值如下

{
     "0": {
         "uid": "1001",
         "name": "张三",
         "score": "80"
     },
     "2": {
         "uid": "1003",
         "name": "王五",
         "score": "74"
     },
     "3": {
         "uid": "1004",
         "name": "李六",
         "score": "93"
     }
 }

显然上面的返回值不符合我们的预期结果,我们需要无下标的json数据,上述代码只需稍微改动一下,用PHP自带array_values就能达到目的

echo json_encode(array_values($scoreData));

返回值如下

[{
     "uid": "1001",
     "name": "张三",
     "score": "80"
 }, {
     "uid": "1003",
     "name": "王五",
     "score": "74"
 }, {
     "uid": "1004",
     "name": "李六",
     "score": "93"
 }]