在php中,如何使用for循环中的数据直接按值更改.json文件中的数据?
我有许多dataxxxx.json文件,需要通过分配一个从外部文件(replacements.txt)获取的值来修改这些文件。在进行任何更改之前,.json文件是直接使用更改编写的,但现在该文件是在没有任何修改的情况下编写的。如果我激活了行(现在已注释)$parameter=“ABCDEF”,那么.json文件将使用“ABCDEF”写入。我认为这取决于foreach循环在副本上工作这一事实,但我认为,将符号&作为数据的值,而不是作为参考。谁能告诉我哪里错了 replacements.txt文件的内容:在php中,如何使用for循环中的数据直接按值更改.json文件中的数据?,php,json,reference,Php,Json,Reference,我有许多dataxxxx.json文件,需要通过分配一个从外部文件(replacements.txt)获取的值来修改这些文件。在进行任何更改之前,.json文件是直接使用更改编写的,但现在该文件是在没有任何修改的情况下编写的。如果我激活了行(现在已注释)$parameter=“ABCDEF”,那么.json文件将使用“ABCDEF”写入。我认为这取决于foreach循环在副本上工作这一事实,但我认为,将符号&作为数据的值,而不是作为参考。谁能告诉我哪里错了 replacements.txt文件的
566-3245541-210~960M-KL45
561-5439945-450~LM_5622-RL.1
560-5517564-260~LM_6332-MK.7
dataxxxx.json如下所示:
{
"autoreport": false,
"autocounter": false,
"job": "",
"note": "",
"pcm": {
"name": "",
"sign": 0,
"tollerance": 0,
"accurancy": 90
},
"aff": {
"name": "",
"sign": 0,
"tollerance": 0,
"accurancy": 70
},
"machines": [
null,
null,
{
"id": 1,
"note": "",
"parts": [
{
"conditions": {
"fgg1": 1,
"validated": false,
"fgg2": 6,
"validated": false
},
"fixed": false,
"image": {
"name": "hr_34450.jpg",
"width": 1920,
"height": 1080,
"depth": 24,
"tiled": false
},
"list": [
{
"code": 101,
"id": "645-67719728-300",
"parameters": [
60,
588,
34
]
},
{
"code": 901,
"id": "589-00687671-420",
"parameters": [
"566-3245541-210",
"561-5439945-450",
"560-5517564-260"
]
}
]
}
]
},
null,
null,
null,
null,
null
]
}
php代码是:
$replacements=array();
$replacementsdata=readDataFile($GLOBALS["DATADIR"].DIRECTORY_SEPARATOR_REVERSE."replacements.txt");
foreach($replacementsdata as &$line){
$line=trim($line);
if(strlen($line)>0){
$elements=explode("~",$line);
$original=trim($elements[0]);
$compatible=trim($elements[1]);
$replacements[]=array("original"=>$original,"compatible"=>$compatible);
}
}
$files=glob($GLOBALS["DATADIR"].DIRECTORY_SEPARATOR_REVERSE."data*.json");
foreach($files as &$file){
$basename=basename($file);
$elements=json_decode(file_get_contents($file),TRUE);
switch($basename){
case "dataindex.json":
//...
break;
default:
foreach($elements["machines"] as &$machine){
if($machine!==NULL){
foreach($machine['parts'] as &$part){
if($part!==NULL){
foreach($part['list'] as &$data){
if($data!==NULL){
$code=&$data["code"];
switch($code){
case "901":
foreach($data['parameters'] as &$parameter){
foreach($replacements as &$replacement){
if($parameters==$replacement["original"]){
$parameter=&$replacement["compatible"];
//$parameter="ABCDEF";
break;
}
}
}
break;
default:
break;
}
}
}
}
}
}
}
break;
}
$fp=fopen($file,'w');
fwrite($fp,json_encode($elements));
fclose($fp);
}