【问题标题】:PHP JSON - How to select the entries which following when meet a specific conditionPHP JSON - 如何在满足特定条件时选择以下条目
【发布时间】:2021-06-06 04:51:26
【问题描述】:

我在 PHP 方面是个笨蛋,我真的很难理解如何归档我将要描述的内容。

目标是在条件之后对以下条目进行子选择:type == STATUS AND VALUE == 40,即 ID 的块(3、8、 28, 33)

这个 json 是来自 SQL 查询的响应。


    {
    "data": [
        {
            "ID": 23,
            "DATETIME": "1612515739000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 1,
            "DATETIME": "1612515745000",
            "VALUE": "40",
            "type": "STATUS",
            "key": "0_203_status",
            "unit": "",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 3,
            "DATETIME": "1612515754000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 8,
            "DATETIME": "1612515760000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 14,
            "DATETIME": "1612515775000",
            "VALUE": "20",
            "type": "STATUS",
            "key": "0_203_status",
            "unit": "",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 13,
            "DATETIME": "1612515775000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 18,
            "DATETIME": "1612515790000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 25,
            "DATETIME": "1612515805000",
            "VALUE": "40",
            "type": "STATUS",
            "key": "0_203_status",
            "unit": "",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 28,
            "DATETIME": "1612515813000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 33,
            "DATETIME": "1612515820000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        }
    ]
}

预期响应

    {
    "data": [
        {
            "ID": 3,
            "DATETIME": "1612515754000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
       {
            "ID": 8,
            "DATETIME": "1612515760000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 28,
            "DATETIME": "1612515813000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 33,
            "DATETIME": "1612515820000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        }

    ]
}

我为选择逻辑附上了一张图片。

任何建议将不胜感激!

【问题讨论】:

  • 到目前为止您尝试过什么(如果有的话)?虽然我们很乐意在您遇到困难时提供帮助,但您仍然需要努力解决问题。此外,目前尚不清楚您的确切问题是什么。你不知道如何从 JSON 中提取数据吗?提取数据后,您不知道如何过滤数组吗?另外,为什么不在数据库查询本身中进行这种过滤?
  • 我还没试过。正如您所建议的,我将尝试从 json 中提取数据或过滤这些数据。无法从 DB 中过滤。谢谢

标签: php json preprocessor


【解决方案1】:

这个脚本会解决你的问题

<?php

$json = '{
    "data": [
        {
            "ID": 23,
            "DATETIME": "1612515739000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 1,
            "DATETIME": "1612515745000",
            "VALUE": "40",
            "type": "STATUS",
            "key": "0_203_status",
            "unit": "",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 3,
            "DATETIME": "1612515754000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 8,
            "DATETIME": "1612515760000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 14,
            "DATETIME": "1612515775000",
            "VALUE": "20",
            "type": "STATUS",
            "key": "0_203_status",
            "unit": "",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 13,
            "DATETIME": "1612515775000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 18,
            "DATETIME": "1612515790000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 25,
            "DATETIME": "1612515805000",
            "VALUE": "40",
            "type": "STATUS",
            "key": "0_203_status",
            "unit": "",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 28,
            "DATETIME": "1612515813000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        },
        {
            "ID": 33,
            "DATETIME": "1612515820000",
            "VALUE": "327.67",
            "type": "AVGKMKWH",
            "key": "0_202_avgkmKwh",
            "unit": "Km/Kwh",
            "policy": "PERIODIC",
            "device_id": "1245454545454",
            "voucher_id": "12451"
        }
    ]
}';

function checkCondition($element) {
    $conditions = [
        "VALUE" => "40",
        "type"  => "STATUS"
    ];

    foreach ($conditions as $conditionKey => $conditionValue) {
        if (isset($element[$conditionKey]) && $element[$conditionKey] != $conditionValue) {
            return false;
        }
    }

    return true;
}

$dataInArray = json_decode($json, true);
$array = $dataInArray["data"];
print_r(array_filter($array, "checkCondition"));

输出

Array
(
    [1] => Array
        (
            [ID] => 1
            [DATETIME] => 1612515745000
            [VALUE] => 40
            [type] => STATUS
            [key] => 0_203_status
            [unit] => 
            [policy] => PERIODIC
            [device_id] => 1245454545454
            [voucher_id] => 12451
        )
    [7] => Array
        (
            [ID] => 25
            [DATETIME] => 1612515805000
            [VALUE] => 40
            [type] => STATUS
            [key] => 0_203_status
            [unit] => 
            [policy] => PERIODIC
            [device_id] => 1245454545454
            [voucher_id] => 12451
        )
)

首先我使用json_decode 将json 转换为数组,然后使用$conditions 变量添加我的条件,最后我使用checkCondition 函数并迭代数组并检查我的条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2014-02-18
    • 1970-01-01
    • 2017-07-06
    相关资源
    最近更新 更多