PHP に多次元配列があり、いくつかの規則に従って操作したいと考えています。
Input-Array: (JSON として出力された変数)
[
{
"meta":{
"title": "Adressdata",
"name": "adress"
},
"data":{
"desc":{ "tooltip": "text",
"maxlength": "100"
},
"line1":{ "tooltip": "Recipient",
"maxlength": "40"
}
}
]
ルール:
{
"0>meta>title": "Companyaddress",
"0>data>desc": {
"tooltip": "Another Text",
"maxLength": "150"
}
}
(2 つのルールがあります。インデックスは入力配列のどのフィールドを変更する必要があるかを説明し、値には代わりに挿入するデータが含まれます。2 番目のルールはオブジェクトを挿入する必要があることに注意してください)
問題:
入力配列の内容をルールに従って変更したいのですが、なかなかうまくいきません。
これが私がすでに持っているphpコードです:
<?php
$input = json_decode(file_get_contents("inputData.json"),true);
$rules = json_decode(file_get_contents("rules.json"),true);
foreach ($rules as $target => $replacement) {
//rule: "0>meta>title": "newTitle"
$node = $input;
foreach (explode(">",$target) as $index) {
$node = $node[$index];
}
$node = $replacement; //replace doesn't work
}
echo "Result-Array: ";
print_r($input);
?>
値を変更できないことを除いて、すべてが機能します。なんで?$node-Variable を設定するたびに、新しい変数を作成するためです。そして、$node の内容のみを変更し、$input の内容は変更しません。
だから私は参照を使用しようとしました-どちらも機能しません: 2 つの $node-Lines をこのコードに変更すると:
$node = &$input;
[...]
$node = &$node[$keys[$i]]; //go to child-node
しかし、子ノードに移動したい 2 行目で親要素が変更されるため、これは機能しません ($node が参照であるため)。
それを行うためのトリックがあるかどうかはわかりません。誰かが私を助けてくれることを願っています