2015-02-24 50 views
0

目標: 我試圖通過讓用戶輸入所需的屬性來讀取任何 json文件的某些部分。php中的變量訪問對象屬性

說我有一個對象,它看起來像這樣:

"adverts": [ 
    { 
    "id": "33655628", 
    "companyInfo": { 
      "companyName": "Company A", 
      "homepage": "http://companya.com", 
      "companyText": null 
    }, 
    ... 
] 

我想通過一個變量分配屬性名稱或「路徑」來訪問屬性。 訪問的第一級($項目 - > $ _ id)的正常工作,但我怎麼的companyName直接訪問內嵌屬性與這樣的變量作爲

$_name = "companyInfo->companyName"; 

例:

$_repeat = "adverts"; 
$_id = "id"; 
$_name = ?????? 

foreach($data->$_repeat as $item){ 
    var_dump($item->$_id); 
    var_dump($item->$_name); 
} 

編輯: 澄清:我希望這是通用的任何 JSON對象!

初步解決方案: 我通過循環得到了想要的結果表明通過@Carlos:

$_title_a = explode(".",$_title); 
$current = $document; 
foreach($_title_a as $a){ 
    $current = $current->$a; 
} 
var_dump($current); 

如果有人有更好的建議,我將很高興聽到這個消息。謝謝大家!

+0

你可能需要在部件解析您的字符串和循環。或者使用類似'eval'的東西... – jeroen 2015-02-24 13:03:12

回答

0

看來你有you..you JSON數據可以用下面的代碼..

$obj= json_decode($yourJsonData); 
print_r($obj); 

foreach ($obj as $key => $value) { 
    $companyinfo = $value['companyInfo']['companyName']; 
} 

在foreach循環,你會得到所需要的關鍵和values..this是隻爲你一個例子..

+0

我不想打印整個json對象。現在的問題是「但我怎麼直接訪問一個嵌套的屬性CompanyName與變量」 – fhollste 2015-02-24 12:58:02

+0

@ Holle..updated答案按你的requirement..please看看 – 2015-02-24 13:01:54

+0

仍然沒有變...... – fhollste 2015-02-24 13:03:35

0

爲什麼你究竟需要這個?

所有你需要做的是:

$jsonData = json_decode($jsonString, true); 

echo $jsonData['adverts'][0]['companyInfo']['companyName']; 

//or 

foreach($jsonData['adverts'] as $advert){ 
    echo $advert['companyInfo']['companyName']; 
} 
+0

是的,但屬性名稱和對象「深度」未知,因此需要變量。 – fhollste 2015-02-24 13:01:40

+1

@Holle到這裏看看:http://stackoverflow.com/questions/1019076/how-to-search-by-key-value-in-a-multidimensional-array-in-php – Carlos 2015-02-24 13:06:51

+0

感謝@Carlos!我讀了這個答案,但我希望更簡單的解決方案,不涉及循環/搜索,因爲我「只是」需要以某種方式:$ item - >「companyInfo-> companyName」到這個$ item-> companyInfo->公司名稱 – fhollste 2015-02-24 13:18:27