Php 如何通过另一个线性数组中的键访问多维数组的元素?

Php 如何通过另一个线性数组中的键访问多维数组的元素?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我们有一个多维关联数组。有必要在一个键上寻址到数组的一个元素,该键被写在另一个线性数组中 也就是说,有一个多维数据数组和一个带键的线性数组: $a=[ 'animals'=> [ 'cats' => [ 'catusdomesticus' => 'home', 'pantera' => 'wild' ] ] ]; $keys=['animals', 'cats', 'pantera']; 有两件事要做: (简单)获得$a

我们有一个多维关联数组。有必要在一个键上寻址到数组的一个元素,该键被写在另一个线性数组中

也就是说,有一个多维数据数组和一个带键的线性数组:

$a=[
  'animals'=> [
    'cats' => [
      'catusdomesticus' => 'home',
      'pantera' => 'wild'
    ]
  ]
];

$keys=['animals', 'cats', 'pantera'];
有两件事要做:

  • (简单)获得$a['animals']['cats']['pantera']
  • (复杂)删除元素$a['animals']['cats']['pantera']
  • 如何在PHP5中执行此操作

    注意:它不需要代码生成和eval()

    UPD:

    获取价值很容易:

    $item =& $a;
    foreach($keys as $key)
      $item =& $item[$key];
    var_dump( $item );
    
    对于remove元素,我尝试下一个代码:

    $item =& $a;
    for($i=0; $i<count($keys); $i++)
    {
      $item =& $item[$keys[$i]];
    
      if($i===count($keys)-1) {
        echo "\nDelete element:\n";
        var_dump($item);
    
        unset($item);
      }
    }
    var_dump( $a );
    

    这里有两种方法,我假设第二种方法能最好地解决这个问题

    <?php
    
    $a=[
      'animals'=> [
        'cats' => [
          'catusdomesticus' => 'home',
          'pantera' => 'wild'
        ]
      ]
    ];
    
    $keys=['animals', 'cats', 'pantera'];
    
    //Method 1, excplicitly say which associative values you want
    echo $a[$keys[0]][$keys[1]][$keys[2]];
    echo "<br/>";
    
    //Method 2 use a loop and keep going down
    $holder = $a;
    foreach($keys as $key){
        $holder=$holder[$key];
    }
    echo $holder;
    
    ?>
    

    我们可以使用带有小调整的引用删除数组值

    $a=[    
      'animals'=> [ 
        'cats' => [ 
          'catusdomesticus' => 'home',  
          'pantera' => 'wild'   
        ]   
      ] 
    ];  
    
    $keys=['animals', 'cats', 'pantera'];   
    
    $delItem = &$a; 
    
    foreach($keys as $key=>$val){   
      if($key == count($keys)-1)    
          $lastKey = $val;  
      else  
          $delItem = &$delItem[$val];   
    
    }   
    echo $delItem[$lastKey];//Get Value 
    unset($delItem[$lastKey]);//Remove Value    
    print_r($a);`
    

    为什么键不应该在新数组中?有原因吗?你试过什么?1.你必须自己试一试。如果有什么不对劲,你就来这里向我们求助。3.祝你好运@Tobias F,阵列的结构事先未知。它有无限的嵌套深度和无限的兄弟元素。@MateiMihai,有关递归方法,请参阅更新+1!!我写了一些类似于早上热身运动的东西,但你写得更快。当你回答一个问题时,你应该简单描述一下它的作用和原因,目的是帮助人们从答案中学习,而不仅仅是给他们代码。这是对简单问题的回答。如何删除元素?方法1不正确。此代码取决于键数组大小。如何使get
    $keys=['animals','cats']?
    和如何使用方法2删除元素?
    <?php
    
    $a=[
      'animals'=> [
        'cats' => [
          'catusdomesticus' => 'home',
          'pantera' => 'wild'
        ]
      ]
    ];
    
    $keys=['animals', 'cats', 'pantera'];
    
    //Method 1, excplicitly say which associative values you want
    echo $a[$keys[0]][$keys[1]][$keys[2]];
    echo "<br/>";
    
    //Method 2 use a loop and keep going down
    $holder = $a;
    foreach($keys as $key){
        $holder=$holder[$key];
    }
    echo $holder;
    
    ?>
    
    $a=[    
      'animals'=> [ 
        'cats' => [ 
          'catusdomesticus' => 'home',  
          'pantera' => 'wild'   
        ]   
      ] 
    ];  
    
    $keys=['animals', 'cats', 'pantera'];   
    
    $delItem = &$a; 
    
    foreach($keys as $key=>$val){   
      if($key == count($keys)-1)    
          $lastKey = $val;  
      else  
          $delItem = &$delItem[$val];   
    
    }   
    echo $delItem[$lastKey];//Get Value 
    unset($delItem[$lastKey]);//Remove Value    
    print_r($a);`