2016-11-28 116 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']