php - 使用循环取消设置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 不起作用?但是如果我在循环内调用回声它的工作
解决方案
使用您提供的示例 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
}
}
推荐阅读
- kubernetes - 由于证书错误,metrics-server 无法对请求进行身份验证
- graph-theory - 从无向图创建有向无环图
- html - 如何更改 HTML 符号的颜色?
- python - 理解 Python 中的 for 循环
- .net - x64 应用程序中的 .Net WPF TaskDialog
- c++ - 无法弄清楚为什么我不断收到“未定义的引用”错误
- android - 未经检查的 Cast 警告和 ClassCastException
- python - 如何在pandas中编辑OneHotEncoder的实现过程?
- json - 如何编写 POJO 以使用 Retrofit2 从 JSON 获取对象内的特定数组?
- c++ - 如果文件在c ++中为空,如何抛出异常?