从JSON修剪不包含已定义数组的数据?

时间:2018-11-28 08:49:37

标签: php json

Offers的JSON数据

foreach($json['offers'] as $offer) 

每个报价都有包含国家/地区的数据

"countries":[{"name":"United States","code":"US"}]

如果所有优惠不包括"US",我该如何删除?

据我了解,我应该使用array_map对吗?但是,如何告诉它删除那些不包含值的对象,而不是那些包含我定义的值的对象?

3 个答案:

答案 0 :(得分:1)

您需要使用array_filter()

$json['offers'] = array_filter($json['offers'], function($item){
    return $item['countries'][0]['code'] == "US";
});

demo中查看结果

答案 1 :(得分:0)

如果我没有误解您的问题,那么简单的array_filter()就能为您解决问题。

<?php

$json = '[{"countries":[{"name":"United States","code":"US"}]},{"countries":[{"name":"United Kingdom","code":"UK"}]},{"countries":[{"name":"Canada","code":"CA"}]}]';
$decode = json_decode($json,1);
$new = array_filter($decode, function ($var) {
    return ($var['countries'][0]['code'] != 'US');
});
print_r($new);
?>

演示: https://3v4l.org/LtPEl

答案 2 :(得分:0)

谢谢你们的回答,但是我已经用另一种方式了。

$salys2 = array("US");      
$salys = array_map('trim', $salys2);    


if (!in_array($offer['countries'][0]['code'], $salys)) {

    // skipping
    continue;
}

有人可以解释一下为什么我们在国家和代码之间保留[0]吗?