Мне нужна строка, чтобы использовать ее для шаблона массива, чтобы найти значение по этому. Например
$test = ['test','test2' => ['test3','test4' => ['test5']]];
$pattern = "['test2']['test4']"
$response = $test{$pattern} <- search
дать ему способ решить эту проблему?
я хочу в этом случае в качестве теста ответа5 по этому шаблону
Неужели это должна быть выкройка? Не могли бы вы сделать $pattern = ['test2', 'test4']?
Если да, см. stackoverflow.com/questions/27929875/…
Ах, копейки упадут, но готов поспорить, что будет лучший подход.
Уродливый способ: $response = eval('$test' . $pattern);
так не работает
@Barmar Я думаю, что для мира было бы лучше, если бы мы все изо всех сил пытались сделать вид, что eval() не существует.
@ Sammitch Я согласен. Я дал ссылку на то, что было бы более полезной отправной точкой.
я нашел способ с eval
теперь посмотри, что ты наделал @Barmar






На основании другого вопроса: Использование строкового пути для установки данных вложенного массива
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 */}
Обратите внимание, что вам нужно использовать ссылки только в том случае, если вы хотите присвоить результат. В противном случае вы можете использовать обычное назначение.
Да, вы определенно не хотите возвращать ссылку из "получателя" и случайно изменить массив позже.
Вы правы, мои ошибки. Проблемы исправлены, и я вставил алгоритм в новую функцию, которая будет обрабатывать процедуру.
Понятия не имею, что ты на самом деле пытаешься здесь сделать