为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 使用 $_POST 数组过滤 JSON 数组

PHP 使用 $_POST 数组过滤 JSON 数组

PHP
长风秋雁 2023-07-21 18:03:20
我目前有一个包含车辆信息的 json 文件:{    "Inventory": [{            "id": "1",            "StockNumber": "1000",            "Make": "Ford",            "Model": "Mustang",            "Trim": "GT",            "Year": "2011",            "Color": "Red",            "Cylinders": "8",            "Transmission": "Manual"        }, {            "id": "2",            "StockNumber": "1001",            "Make": "Ford",            "Model": "Mustang",            "Trim": "GT",            "Year": "2012",            "Color": "Yellow",            "Cylinders": "8",            "Transmission": "Automatic"        }, {            "id": "3",            "StockNumber": "1002",            "Make": "Chevy",            "Model": "Camaro",            "Trim": "ZL1",            "Year": "2020",            "Color": "Red",            "Cylinders": "8",            "Transmission": "Manual"        }]}我试图让复选框按品牌、型号、年份、颜色等过滤结果...从选择页面中,我获取复选框的值,并将其传递到搜索 php 页面。这是传递到搜索页面的数组。['模型' => ['野马', '科迈罗'],'颜色' => ['红色']];这应该返回 2 个结果:红色野马和红色科迈罗。如果我使用array_filter,在选择福特后,雪佛兰车辆现在会被过滤掉。所以我可以选择福特和红色,我会得到预期的结果。但是,现在我无法选择雪佛兰,因为它已被过滤掉。所以我看不到红色的福特和雪佛兰车辆。我得到一个结果,一辆红色野马。如果我尝试使用 array_push 将车辆添加到结果数组中,我可以添加福特和雪佛兰,但选择红色不会过滤掉黄色野马,因为黄色野马是福特,并且它符合该条件。我得到 3 个结果,1 辆红色野马、1 辆黄色野马和 1 辆红色科迈罗。我正在努力使用传入的数组来过滤 json 结果的逻辑。似乎我需要传入"or"多个品牌以及"and"每个类别。福特或雪佛兰和红色。另一个例子可能是:福特或雪佛兰和红色或黄色和手册。我根据以下回复更新了代码:$make = ['Mustang', 'Camaro'];$color = ['Red'];$result = [];   foreach ($dataSource as $k => $data) {         foreach ($posts as $postKey => $postValue) {              // This does not.  Only filters on last array in loop     if (array_key_exists($postKey, $data) && in_array($data[$postKey],      $postValue)) {          $result[$k] = $data;        } else {      unset($result[$k]);            }         }       }     }如何以静态示例的工作方式根据数组标准动态过滤该数组?
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

您需要将 post 数组转换为此结构以便于处理


 $posts = [

        'Model' => ['Mustang', 'Camero'],

        'Color' => ['Red']

    ];

然后使用 foreach 过滤器:


        $carJson = '{

    "Inventory": [{

            "id": "1",

            "StockNumber": "1000",

            "Make": "Ford",

            "Model": "Mustang",

            "Trim": "GT",

            "Year": "2011",

            "Color": "Red",

            "Cylinders": "8",

            "Transmission": "Manual"

        }, {

            "id": "2",

            "StockNumber": "1001",

            "Make": "Ford",

            "Model": "Mustang",

            "Trim": "GT",

            "Year": "2012",

            "Color": "Yellow",

            "Cylinders": "8",

            "Transmission": "Automatic"

        }, {

            "id": "3",

            "StockNumber": "1002",

            "Make": "Chevy",

            "Model": "Camaro",

            "Trim": "ZL1",

            "Year": "2020",

            "Color": "Red",

            "Cylinders": "8",

            "Transmission": "Manual"

        },

        {

            "id": "4",

            "StockNumber": "1005",

            "Make": "Chevy",

            "Model": "VW",

            "Trim": "ZL1",

            "Year": "2020",

            "Color": "Red",

            "Cylinders": "8",

            "Transmission": "Manual"

        }]

}';

    $cars = json_decode($carJson, true)['Inventory'];



    $posts = [

        'Model' => ['Mustang', 'Camero'],

        'Color' => ['Red']

    ];


    $result = [];


    foreach ($posts as $postKey => $postValue) {

        foreach ($cars as $k => $car) {

            if (array_key_exists($postKey, $car) && in_array($car[$postKey], $postValue)) {

                $result[$k] = $car;

            } else {

                unset($cars[$k]);

                unset($result[$k]);

            }

        }

    }


    print_r($result);



查看完整回答
反对 回复 2023-07-21
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信