1

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 が参照であるため)。

それを行うためのトリックがあるかどうかはわかりません。誰かが私を助けてくれることを願っています

4

2 に答える 2