2016-11-28 112 views
0

這是我sample.json文件如何在PHP中使用explode值分配數組變量?

"general": { 
    "option_name" : "option_name", 
    "filter_name" : "filter name" 
} 

,我想更新值使用關鍵

$string = "general.filter_name"; 

$updateContent = "new filtername"; 

$langArray = explode('.',$string); 

print_r($langArray); 

/*Array 
(
[0] => general 
[1] => filter_name 
) */ 


$file='assets/sample.json'; 

$jsonString = file_get_contents($file); 
$data = json_decode($jsonString, true); 

**$data['general']['filter_name'] = $updateContent; ** 


$newJsonString = json_encode($data); 
file_put_contents($file, $newJsonString); 

在這裏,我想分配陣列

[0] => general 
[1] => filter_name 

應該

$data['general']['filter_name'] 

如何定義這樣的數組?由於

回答

1

您可以使用引用做到這一點:

$json = file_get_contents('assets/sample.json'); 
$json = json_decode($json, true); 

$path = "general.filter_name"; 
$path = explode('.', $path); 

$ref = &$json; 

foreach ($path as $key) { 
    $ref = &$ref[$key]; 
} 

$ref = "new filtername"; 
unset($ref); 

工作原理:通過$path項目$ref = &$json;

  • 迭代得到的$json['general']['filter_name']值:

    1. 爲您的數組的引用:
      1. 在第一次迭代$ref將參照$json['general']
      2. 在第二次迭代$ref將參照$json['general']['filter_name'] - 這正是我們想要的
    2. 當分配$ref = "new filtername";你分配$json['general']['filter_name'] = "new filtername";
    3. 不要忘記刪除參考unset($ref); ,沒有這樣做有可能改變$ref,從而改變$json['general']['filter_name']