PHP:我们可以在多维数组中动态获得我们想要的任何键吗?

时间:2016-07-02 22:37:08

标签: php arrays multidimensional-array dynamically-generated

我们可以在多维数组中以动态方式获得任何键吗?

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      internalLogToConsole="true">

例如,如果我想到达Kitchen1&#39;和&#39;菜肴&#39;和&#39; Iron&#39;分别。

$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;

我试图将其作为:

 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或/和$ dishKeys或/和$ ironKeys分配键,以获取多维数组中的任何键值吗?

3 个答案:

答案 0 :(得分:1)

Chay22是正确的,基于this

这将有效; eval('var_dump($f['.$dishKeys.']);');

你也可以把它变成像这样的可用变量

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

答案 1 :(得分:0)

或者,您可以使用函数来使用点表示法访问内部键。例如&#34; key1.key2.key3&#34;。可以在此处找到此类示例:https://github.com/rappasoft/laravel-helpers/blob/master/src/helpers.php

但是上面描述的eval方法也可以。但是,由于未设置密钥,您更容易出错,如果您从用户输入设置动态密钥,则清理会成为问题。

答案 2 :(得分: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;
}

希望这有帮助。

注意double&amp;的具体用法。单引号,因为有时我们想要实际使用数组的值,有时我们想要输出数组名称($f