PHP: Можем ли мы ДИНАМИЧЕСКИ получить доступ к любому ключу, который мы хотим получить в многомерном массиве?

Можем ли мы ДИНАМИЧЕСКИ получить доступ к любому ключу, который мы хотим получить в многомерном массиве?

$f['Kitchen']['Dishes']['Mantovarka']=3;
$f['Kitchen']['Dishes']['Castrool']=91;
$f['Kitchen']['Dishes']['Separator']=10;
$f['Kitchen']['Product']=18;
$f['Kitchen']['Textile']=19;
$f['Kitchen']['Blue things']['Juicemaker']=25;
$f['Kitchen']['Blue things']['Freegener']=13;
$f['Kitchen1']['Blue things One']['Microwave']=4;
$f['Kitchen1']['Blue things One']['Iron']=24;
$f['Kitchen1']['Dishes One']['Separator']=110;

Например, если я хочу добраться до «Кухни1» и «Блюда» и «Железо» соответственно.

 var_dump($f['Kitchen1']);
Output:
[
'Blue things One' => [
'Microwave' => 4
'Iron' => 24
]
'Dishes One' => [
'Separator' => 110
]
]

var_dump($f['Kitchen']['Dishes']);
Output:
[
'Mantovarka' => 3
'Castrool' => 91
'Separator' => 10
]

var_dump($f['Kitchen1']['Blue things']['Iron']);
Output:
24

Я пытался достичь этого как:

 $kitchenKeys = "{'Kithcen1'}";
var_dump($f[$kitchenKeys]);
Output:
NULL

$dishKeys = "{'Kitchen'}][{'Dishes'}";
var_dump($f[$dishKeys]);
Output:
NULL

$ironKeys = "{'Kitchen1'}][{'Blue things One'}][{'Iron'}";
var_dump($f[$ironKeys]);
Output:
NULL

Можем ли мы динамически назначать ключи для $ kitchenKeys или / и $ dishKeys или / и $ ironKeys, чтобы получить какое-либо значение ключа в многомерном массиве?

1

Решение

Chay22 является правильным и основан на этот

это будет работать; eval('var_dump($f['.$dishKeys.']);');

Вы также можете сделать это в качестве полезной переменной, как это

eval('$newkey = ($f['.$dishKeys.']);');
var_dump($newkey);
1

Другие решения

Кроме того, вы можете использовать функцию для доступа к внутренним клавишам, используя точечную запись. Например, «key1.key2.key3». Пример такого можно найти здесь: https://github.com/rappasoft/laravel-helpers/blob/master/src/helpers.php

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

0

Я думаю, что способ, которым я бы сделал это, динамически, это получить массив значений, а затем, внутри foreach (внутри функции, если вы будете использовать ее более одного раза, я сделал для отображения) генерировать строка для элементов массива. Затем установите строку, содержащую команду, которую вы хотите запустить, и, наконец, выполните ее с eval(), Будьте осторожны с тем, что будут содержать эти массивы, особенно если это генерируется пользователем, так как eval() может быть опасным

$dishKeysArray = array("Kitchen", "Dishes");

$evalString = getEvalString($dishKeysArray);

eval($evalString);

function getEvalString($array){
$elementString = "";
foreach($array as $arr){
$elementString .= "['$arr']";
}
$evalString = 'var_dump($f' . $elementString . ');';
return $evalString;
}

Надеюсь это поможет.

Обратите внимание на конкретное использование двойного & одинарные кавычки, так как иногда мы хотим использовать значение массива, а иногда мы хотим буквально вывести имя массива ($f)

0
По вопросам рекламы [email protected]