【问题标题】:PHP: Can we get reach DYNAMICALLY any key we want to in multidimensional array?PHP:我们可以在多维数组中动态获取我们想要的任何键吗?
【发布时间】:2016-11-05 00:34:11
【问题描述】:

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

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

例如,如果我想分别访问“Kitchen1”、“Dishes”和“Iron”。

 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 分配键,以获取多维数组中任何键的值?

【问题讨论】:

  • 我想你可能需要eval() 来做到这一点
  • 我想这取决于你所说的动态。您可以轻松地为变量赋值以访问它。例如$value1="Kitchen1"; $value2 = "Dishes One"; print_r($f[$value1][$value2]);

标签: php arrays multidimensional-array dynamically-generated


【解决方案1】:

Chay22 是正确的,基于 this

这会起作用; eval('var_dump($f['.$dishKeys.']);');

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我认为我会动态地做它的方式是获取一个值数组,然后在一个 foreach 内部(如果你会多次使用它,我这样做是为了display) 为数组的元素生成一个字符串。然后设置一个包含你要运行的命令的字符串,最后用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)

      【讨论】:

      • 感谢您的建议!我是这样使用的:$my_array = array("0" => "Kitchen1","1" => "Blue things One"); extract($my_array,EXTR_PREFIX_ALL,'index');$dishKeys = "'{$index_0}']['{$index_1}'"; eval('$newkey = ($f['.$dishKeys.']);'); var_dump($newkey);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      相关资源
      最近更新 更多