按日期范围过滤此json数组创建新的json数组[关闭]

我有一个带有这些键/值的json数组</ p>

   {
“results”:[
{
“date”:“2013-15-5”,
“position”:“23”,
“race”:“2”
},
{
“date”:“2013-15-6”,
“position”:“15”,
“race”:“4”
},
{
“date”:“2013- 15-7“,
”位置“:”20“,
”竞赛“:”5“
},
{
”日期“:”2013-15-8“,
”位置“ :“9”,
“竞赛”:“9”
}
]
}
</ code> </ pre>

鉴于我有两个存储的变量 $ from </ code>和 $ to </ code>日期格式相同 2013-15-5 </ code> </ p>

如何过滤此json 数组,因此输出显示 2013-15-6 </ em> - 2013-15-8 </ em>的范围谢谢</ p>

  {\  n“结果”:[
{
“日期”:“2013-15-6”,
“位置”:“15”,
“种族”: “4”
},
{
“日期”:“2013-15-7”,
“位置”:“20”,
“种族”:“5”
},
{

“日期”:“2013-15-8”,
“位置”:“9”,
“竞赛”:“9”
}
]
}
</ code> </ pre>
</ div>

展开原文

原文

I have a json array with these keys/values

{
    "results": [
        {
            "date": "2013-15-5",
            "position": "23",
            "race" : "2"
        },
        {
            "date": "2013-15-6",
            "position": "15",
            "race" : "4"
        },
        {
            "date": "2013-15-7",
            "position": "20",
            "race" : "5"
        },
        {
            "date": "2013-15-8",
            "position": "9",
            "race" : "9"
        }
    ]
}

Given I have two variables storing a $from and $to date in the same format 2013-15-5

How can I filter this json array so the output shows the range for 2013-15-6 - 2013-15-8 thanks

{
    "results": [
        {
            "date": "2013-15-6",
            "position": "15",
            "race" : "4"
        },
        {
            "date": "2013-15-7",
            "position": "20",
            "race" : "5"
        },
        {
            "date": "2013-15-8",
            "position": "9",
            "race" : "9"
        }
    ]
}

doudang4568
doudang4568 您可以通过为其编写代码来过滤它。你在哪里找到路障来描绘一些代码?
大约 7 年之前 回复
dongying195959
dongying195959 json_decode,array_filter,匿名函数,DateTime。:)
大约 7 年之前 回复
douge3113
douge3113 要过滤日期范围,您必须将日期字符串转换为内部日期值。
大约 7 年之前 回复
doushi9729
doushi9729 是的,它始终按日期排序
大约 7 年之前 回复
douwen3965
douwen3965 数组是否始终按照示例中的日期排序?
大约 7 年之前 回复

1个回答

well convert the json to a php array, and pass it through array_filter as below

array_filter($array, function ($item) {
       $from = strtotime("2013-15-6");
       $to = strtotime("2013-15-8");

       $ts = strtotime($item['date']);
       if ($ts >= $from && $ts <= $to) return true;
       return false; 
});
duanaoshu1989
duanaoshu1989 codepad.org/9WXpGXn7已更新,但你需要更新它的日期Y-d-m不支持格式@Anagio
大约 7 年之前 回复
dsghpgmay31938863
dsghpgmay31938863 谢谢,但第二个print_r仍显示所有3个日期,似乎没有过滤?
大约 7 年之前 回复
douxi3977
douxi3977 你没有正确命名变量。 codepad.org/kTuMFtvt
大约 7 年之前 回复
doujia2090
doujia2090 确定一下
大约 7 年之前 回复
doucong7963
doucong7963 嗨,谢谢你试图帮忙。 我在测试时因为匿名函数而出现错误,并试图将函数$ item移到过滤器之外,但对此并不是很好。 你能看看我做了什么,也许有助于进行所需的更改请来codepad.org/2s9uh8tD谢谢
大约 7 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐