2015-05-09 2 views
1
$lookup_table = array ("a" => "['foo']['bar']", "b" => "['foo']['man'][0]"); 

$foo = array ("a" => array ("bar" => "my value")); 

var_dump ($foo['a']['bar']); //output: my value 

Что я хочу сделать, это поместить ['a'] ['bar'] в виде строки и в основном сделать небольшой массив, содержащий ключ и значение или местоположение в массиве где значение будет.Использовать строку для многомерного ключа массива

$key = "['a']['bar']";, а затем сделать $x = $foo[$key]; и иметь $ x = "мое значение".

Я понимаю, что я уже поставил квадратные скобки в строке, и я делаю это снова выше, но я не уверен, как бы написать это в строке.

+0

Вы хотите присвоить значение ключу так же, как в цикле foreach? это много или еще что-нибудь еще? –

+0

@anantkumarsingh Я хочу $ x = "мое значение", когда я делаю $ x = $ foo [$ lookup_table [$ a]]; но я не могу использовать ключ массива как строку, как я сделал – user983223

+0

Каков ваш ожидаемый результат. напишите в своем коде. Ваш вопрос не собирается меня очищать. И, пожалуйста, поместите свой вывод на основе массива, который вы сначала показываете не как $ x = 'my vale' и все такое? –

ответ

0
$lookup_table = array ("a" => "['foo']['bar']", "b" => "['foo']['man'][0]"); 
$foo = array ("a" => array ("bar" => "my value"), "b" => array("man" => array("blah"))); 

echo getValue($lookup_table, $foo); 

echo "\n"; 



function getValue($lookup, $source) 
{ 
    foreach ($lookup as $k => $v) 
    { 
     $v = str_replace("'", "", $v); 
     $v = ltrim(rtrim($v, "]"), "["); 

     $values = explode("][", $v); 
     $data = $source[$k]; 

     for ($i = 1; $i < count($values); $i++) 
     { 
      $data = $data[$values[$i]]; 

      if($i == (count($values) - 1)) 
       echo $k . " = " . $data . "\n"; 
     } 
    } 
} 

Выход:

a = my value 
b = blah 

Я не думаю, что вам нужно использовать ', потому что вы вроде объявляя ключ .. поэтому функция может просто использовать его как междунар и строки то же самое.

Итак, в основном, что я сделал: 1. Цикл думал о всех ключах с отформатированными массивами. 2. Пропуск первого, поскольку его фактическое имя переменной 3. Цикл, пока мы не достигнем конечного значения, а затем отобразим его.

Btw, действительно хотел найти $foo? Если да. дайте мне знать, и я отредактирую код.

Смежные вопросы