Does anybody see anything wrong with the following function? (Edit: no, I don’t think anything is wrong, I am just double-checking since this will be inserted into a very common code path.)
JavaScript
x
function getNestedVar(&$context, $name) {
if (strstr($name, '.') === FALSE) {
return $context[$name];
} else {
$pieces = explode('.', $name, 2);
return getNestedVar($context[$pieces[0]], $pieces[1]);
}
}
This will essentially convert:
JavaScript
$data, "fruits.orange.quantity"
into:
JavaScript
$data['fruits']['orange']['quantity']
For context, this is for a form utility I am building in Smarty. I need the name for the form also so I need the string to be in a key-based form, and can’t directly access the Smarty variable in Smarty.
Advertisement
Answer
Try an iterative approach:
JavaScript
function getNestedVar(&$context, $name) {
$pieces = explode('.', $name);
foreach ($pieces as $piece) {
if (!is_array($context) || !array_key_exists($piece, $context)) {
// error occurred
return null;
}
$context = &$context[$piece];
}
return $context;
}