PHP — Как сохранить ключи массивов в массиве и использовать его для последующего доступа к значению

#php

#php

Вопрос:

Я хочу сохранить массив ключей и использовать его как индекс, чтобы вернуться к соответствующему значению в исходном массиве. Вот пример для иллюстрации.

 $myArray = array("foo" => array("bar" => "Hello"));
  

ручной способ добраться до «Привет» был бы

 $helloString = $myArray["foo"]["bar"];
  

но я хочу гибкий способ сделать это для массивов с N количеством ключей
что-то вроде

 $keys = array("foo","bar");
$helloString = $myArray[$keys];  //doesn't work but hopefully shows my intent
  

Есть ли способ сделать это без использования eval()?

Комментарии:

1. Нет встроенных способов делать такие вещи. Вы должны сделать это сами

2. Напишите функцию, которая принимает массив ключей и получает значение.

Ответ №1:

Я думаю, вы могли бы сделать что-то вроде этого:

 <?php                                                                                                                                                                                                      
$myArray = array("foo" => array("bar" => "Hello"));                                                                                                                                                        
$keys = array("foo","bar");                                                                                                                                                                                

$item = $myArray;                                                                                                                                                                                          
foreach($keys as $k) {                                                                                                                                                                                     
    $item = $item[$k];                                                                                                                                                                                     
}                                                                                                                                                                                                                                                                                                                                                                                                                     
echo $item; //Hello                                                                                                                                                                                            
?>
  

Или вставить его в функцию:

 function getValue($array, $keys) {                                                                                                                                                                                                                                                                                                                                                            
    foreach($keys as $k)                                                                                                                                                                               
        $array = $array[$k];                                                                                                                                                                                 

    return $array;                                                                                                                                                                                          
}
  

Комментарии:

1. Не беспокойтесь, рад, что смог помочь 🙂

Ответ №2:

На самом деле не понимаю, но пытаюсь :

 $keys = array("foo","bar");
$helloString = $myArray[$keys[0]][$keys[1]];
  

Ответ №3:

Вы даже можете попробовать это также

 $myArray = array("foo" => array("bar" => "Hello"));                                                                                                                                                        
$keys = array("foo","bar");
function getval($myArray, $keys){
        $temp = $myArray[$keys[0]];
        if(!is_array($temp)){
            return $temp;
        }
        else
        {
            array_splice($keys,0,1);
            return getval($temp, $keys);
        }
}

//Here you go 
echo getval($myArray, $keys);