0

我正在接收 JSON 并尝试使用 PHP 解释一些值。

JSON 转储的示例片段:

["11811"]=>
  object(stdClass)#15 (11) {
    ["parent_area"]=>
    NULL
    ["generation_high"]=>
    int(19)
    ["all_names"]=>
    object(stdClass)#16 (0) {
    }
    ["id"]=>
    int(11811)
    ["codes"]=>
    object(stdClass)#17 (3) {
      ["ons"]=>
      string(2) "08"
      ["gss"]=>
      string(9) "E15000008"
      ["unit_id"]=>
      string(5) "41421"
    }
    ["name"]=>
    string(10) "South East"
    ["country"]=>
    string(1) "E"
    ["type_name"]=>
    string(15) "European region"
    ["generation_low"]=>
    int(1)
    ["country_name"]=>
    string(7) "England"
    ["type"]=>
    string(3) "EUR"
  }

由于有很多(嵌套)数据,我需要获取 ["name"] 的值,其中 ["type_name"] == 'European region'。

谢谢。

4

2 回答 2

0

你可以使用array_filter()

$data_array = array(...);
function is_european($data) {
   return $data->type_name == 'European region';
}
$filtered = array_filter($data_array,'is_european');

然后使用过滤后的数组来获取值。

也许更好的方法是使用JsonPath,就像这样,假设您的数组是解码 JSON(对象)的结果:

$names = jsonPath($data_object, "$.[?(@['type_name'] == 'European region')].name");

这个我自己没试过,可能需要修正一下。

于 2013-04-16T15:22:20.863 回答
-1

尝试这个:

<?php
$json = JSON_decode(str,true);
$arr  = Array();
foreach($json as $f) {
 /* eg. $f = $json["11811"] */
 if($f['type_name'] == 'European region') {
  $arr[] = $f['name'];
 }
}
?>
于 2013-04-16T13:00:42.793 回答