PHP& JSON:如何从另一个值等于xyz的位置获取值?

时间:2013-04-16 12:50:23

标签: php json

我正在收到一个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”] =='欧洲地区'。

感谢。

2 个答案:

答案 0 :(得分: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");

我自己没试过,可能需要一些修正。

答案 1 :(得分:-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'];
 }
}
?>