PHP использует строку как шаблон ключа массива

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

$test = ['test','test2' => ['test3','test4' => ['test5']]];
$pattern = "['test2']['test4']"
$response = $test{$pattern} <- search

дать ему способ решить эту проблему?

Понятия не имею, что ты на самом деле пытаешься здесь сделать

user9487972 31.05.2018 02:03

я хочу в этом случае в качестве теста ответа5 по этому шаблону

Pla558 31.05.2018 02:05

Неужели это должна быть выкройка? Не могли бы вы сделать $pattern = ['test2', 'test4']?

Barmar 31.05.2018 02:06

Если да, см. stackoverflow.com/questions/27929875/…

Barmar 31.05.2018 02:06

Ах, копейки упадут, но готов поспорить, что будет лучший подход.

user9487972 31.05.2018 02:07

Уродливый способ: $response = eval('$test' . $pattern);

Barmar 31.05.2018 02:07

так не работает

Pla558 31.05.2018 02:22

@Barmar Я думаю, что для мира было бы лучше, если бы мы все изо всех сил пытались сделать вид, что eval() не существует.

Sammitch 31.05.2018 02:28

@ Sammitch Я согласен. Я дал ссылку на то, что было бы более полезной отправной точкой.

Barmar 31.05.2018 02:29

я нашел способ с eval

Pla558 31.05.2018 02:34

теперь посмотри, что ты наделал @Barmar

castis 31.05.2018 02:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
11
45
1

Ответы 1

На основании другого вопроса: Использование строкового пути для установки данных вложенного массива

function GetValueFromPattern($arr, $pattern) {
    $exploded = explode(".",$pattern);

    $temp = $arr;
    foreach($exploded as $key) {
        if (key_exists($key, $temp)) {
            $temp = $temp[$key];
        } else {
            return ["status" => false];
        }
    }
    return ["status" => true, "response" => $temp];
}

$test = ['test','test2' => ['test3'=>"a",'test4' => ['test5']]];
$pattern = "test2.test3";
$response = GetValueFromPattern($test, $pattern);
if ($response["status"]) {
    echo $response["response"];
} else {
    echo "Error!";
}

Вы обязательно захотите добавить if (key_exists($key, $temp);) {} else {/* error stuff */}

Sammitch 31.05.2018 02:30

Обратите внимание, что вам нужно использовать ссылки только в том случае, если вы хотите присвоить результат. В противном случае вы можете использовать обычное назначение.

Barmar 31.05.2018 02:30

Да, вы определенно не хотите возвращать ссылку из "получателя" и случайно изменить массив позже.

Sammitch 31.05.2018 02:31

Вы правы, мои ошибки. Проблемы исправлены, и я вставил алгоритм в новую функцию, которая будет обрабатывать процедуру.

CoralK 31.05.2018 02:46

Другие вопросы по теме