У меня есть многомерный массив в php, который я хочу манипулировать в соответствии с некоторыми правилами.Изменение содержимого многомерного массива в php?
ввода-массив: (Variable распечатываются в формате 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 правила, индекс объясняет, какое поле из входнога -array необходимо изменить, а значение содержит данные, которые нужно вставить вместо этого. Обратите внимание, что второе правило хочет вставить объект)
Проблема:
Я хочу изменить содержимое входного массива в соответствии с правилами, но я изо всех сил, делая это.
Вот 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 = &$input;
[...]
$node = &$node[$keys[$i]]; //go to child-node
Но это не работает, потому что вторая строка, где я просто хочу перейти к дочернему узлу, изменяет родительский элемент (потому что $ node является ссылкой).
Я понятия не имею, если есть трюк, чтобы сделать это, я надеюсь, что кто-то может помочь мне
Пожалуйста, покажите нам код, который объявляет 'Input-Array'. – Smandoli
@Smandoli: У меня есть текстовый файл с указанным выше JSON-содержимым. И я загружаю его с помощью '$ input = json_decode (file_get_contents (" path.json "), true);' – maja
Я также могу изменить правила, чтобы у них был другой формат, но мне нужно иметь ту же функциональность. – maja