首页 > 解决方案 > 使用循环取消设置php

问题描述

为什么我不能用这段代码得到我想要的结果?

for($i=0; $i<count($results); $i++){
                            if($results[$i]->high == $results[$i]->open and $results[$i]->low == $results[$i]->close and $results[$i]->vol == 0){
                                unset($results[$i]);    
                        }
echo json_encode($results);

为什么我仍然得到相同的结果,就好像循环内的 unset 不起作用?但是如果我在循环内调用回声它的工作

标签: phpfor-loop

解决方案


使用您提供的示例 json 数据,我添加了一条DUMMY与 中的条件匹配的记录if,因此它将unset如下所示:

<?php
$json = '[
   {
      "code":"TLKM",
      "_date":"2020-11-09",
      "_time":"09:17:00",
      "open":2890,
      "high":2890,
      "low":2880,
      "close":2890,
      "vol":260100
   },
   {
      "code":"TLKM",
      "_date":"2020-11-09",
      "_time":"09:18:00",
      "open":2880,
      "high":2890,
      "low":2880,
      "close":2880,
      "vol":288300
   },
   {
      "code":"DUMMIE",
      "_date":"2020-11-09",
      "_time":"09:19:00",
      "open":2890,
      "high":2890,
      "low":2880,
      "close":2880,
      "vol":0
   },
   {
      "code":"TLKM",
      "_date":"2020-11-09",
      "_time":"09:19:00",
      "open":2890,
      "high":2890,
      "low":2880,
      "close":2890,
      "vol":3070200
   }
]';

// turn json into associative array
$arr = json_decode($json, true);

// process the array
foreach ($arr as $key => $value) {
    if ($arr[$key]['high'] == $arr[$key]['open'] and $arr[$key]['low'] == $arr[$key]['close'] and $arr[$key]['vol'] == 0) {
        unset($arr[$key]);
    }
}

// array back to json format
$json = json_encode($arr);

看看演示

输出:

{
    "0": {
        "code": "TLKM",
        "_date": "2020-11-09",
        "_time": "09:17:00",
        "open": 2890,
        "high": 2890,
        "low": 2880,
        "close": 2890,
        "vol": 260100
    },
    "1": {
        "code": "TLKM",
        "_date": "2020-11-09",
        "_time": "09:18:00",
        "open": 2880,
        "high": 2890,
        "low": 2880,
        "close": 2880,
        "vol": 288300
    },
    "3": {
        "code": "TLKM",
        "_date": "2020-11-09",
        "_time": "09:19:00",
        "open": 2890,
        "high": 2890,
        "low": 2880,
        "close": 2890,
        "vol": 3070200
    }
}

推荐阅读