Как я могу получить доступ к определенной глубине ассоциативного массива с переменными переменными - PullRequest
1 голос
/ 04 мая 2019

Я уже давно бьюсь над этой проблемой.Я работаю над программным обеспечением, которое создает дерево на основе результатов MySQL, проверяя изменения между каждой строкой, чтобы решить, куда в дереве поместить новые данные.

Сейчас я зашел в тупик, пытаясьчтобы понять, как я могу динамически указывать PHP, чтобы он обращался к различным частям моего массива.

Я думал об использовании переменных, но, похоже, это не работает.Чтобы упростить свою жизнь, я попытался создать тестовый файл для проверки этого поведения, и вот результат ...

$array = [
    0 => [
        "name" => "test"
    ],
    1 => [
        "name" => "test",
        "data" => [
            "content" => 5
        ]
    ]
];

$ref = 'array["1"]["name"]';

echo $ref."\n";
echo $$ref;

Вывод

array["1"]["name"] 
Notice: Undefined variable: array["1"]["name"] in P:\xampp\htdocs\assets\php\test.php on line 23

Вместо этого я ожидал что-то вроде test.

Я также хотел бы отметить, что я пробовал метод ${}, но я не влияю на массив, но вместо этого добавляю данные в другойпеременная в тех редких случаях не выдает ошибку.

Кто-нибудь может помочь?Спасибо!

1 Ответ

0 голосов
/ 05 мая 2019

, подумав о проблеме еще раз, я придумал обходной путь для достижения намеченного результата. Я решил использовать ссылки make с &$var.

Итак, я решил настроить код для создания массива каждого шага, который нужно выполнить, чтобы достичь нужного места, а не строки. Пример следует:

// Old method
$ref = 'array["1"]["name"];

// New method
$ref = ["1", "name"];

Затем следует код, циклически перебирающий массив, ссылающийся на исходный массив, но медленно углубляющийся ...

// Referencing the original array
$referencedArray = &$array;

// Going one step at the time inside the nested array
foreach ($ref as $k => $v) {
   $referencedArray = &$referencedArray[$rav];
}

Я считаю, что это решение может подойти для моего случая, но если у вас есть какие-либо предложения, пожалуйста, дайте мне знать.

...