Это своего рода общий вопрос реализации.Если у меня есть произвольно глубокий массив, и я не знаю заранее, какими будут ключи, каков наилучший способ получить доступ к значениям в определенных путях ассоциативного массива?Например, учитывая массив:
array(
'great-grandparent' = array(
'grandparent' = array(
'parent' = array(
'child' = 'value';
),
'parent2' = 'value';
),
'grandparent2' = 'value';
)
);
Каков наилучший способ получить доступ к значению на $array['great-grandparent']['grandparent']['parent']['child']
, учитывая, что я не знаю ключей заранее.Я использовал eval для построения вышеуказанного синтаксиса в виде строки с именами переменных, а затем eval'd строку для получения данных.Но Eval медленный, и я надеялся на что-то быстрее.Что-то вроде $class->getConfigValue('great-grandparent/grandparent/'.$parent.'/child');
, которое вернуло бы 'значение'
Пример кода Eval
public function getValue($path, $withAttributes=false) {
$path = explode('/', $path);
$rs = '$r = $this->_data[\'config\']';
foreach ($path as $attr) {
$rs .= '[\'' . $attr . '\']';
}
$rs .= ';';
$r = null;
@eval($rs);
if($withAttributes === false) {
$r = $this->_removeAttributes($r);
}
return $r;
}