2013-04-16 57 views
0

我收到一個JSON並嘗試使用PHP解釋一些值。PHP&JSON:如何從另一個值等於xyz的位置獲取值?

實施例從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" 
    } 

由於有大量(嵌套的)的數據,我需要獲得[「名稱」]其中[「TYPE_NAME」] ==「歐洲的值地區'。

謝謝。

+2

你可以請你展示一些你已經試圖做到的事情嗎? – Neal

+0

$ response = file_get_contents($ api); \t $ jsonobj = json_decode($ response); \t foreach($ jsonobj as $ json){ \t \t var_dump($ json); \t} 我只知道如何進入每個對象$ json->名稱等 – Mike

回答

-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']; 
} 
} 
?> 
+0

嗯,因爲什麼時候var是合法的PHP? – Neal

+0

謝謝m93a。我設法從您的示例中創建以下內容... \t \t $ api =「http://mapit.mysociety.org/postcode/$postcode」; \t \t $ response = file_get_contents($ api); \t \t $ jsonobj = json_decode($ response); \t \t的foreach($ jsonobj爲$ JSON){ \t \t \t的foreach($ JSON作爲$ OBJ){ \t \t \t \t如果($ obj-> TYPE_NAME == '歐洲區域'){ \t \t \t \t \t return $ obj-> name; \t \t \t \t} \t \t \t} \t \t} – Mike

+0

@Neal對不起,我通常使用JavaScript(Node.js的),所以我忘了。每個(或幾乎所有)其他編程語言都使用它。 – m93a

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"); 

沒有嘗試這樣做我自己,它可能需要一點更正。

相關問題