I am trying to remove eval()
from my code.
Currently I use:
eval( "$mkt_data" . $branch . " = $xyz" );
to assign $xyz
(which is also a multidimensional array) to the specific branch of $mkt_data
.
$branch can be 1, 2 or 3 levels deep, i.e.
$branch = "['mkt1']['offer']['bid']";
or
$branch = "['status']";
is there a clever way to do this?
You can use a function like this:
function set(&$ary, $keys, $value) {
$last = array_pop($keys);
foreach($keys as $k) {
if(!isset($ary[$k]))
$ary[$k] = array();
$ary = &$ary[$k];
}
$ary[$last] = $value;
}
Example:
$data = array();
set($data, array('foo', 'bar', 'baz'), 42);
print_r($data);
Result:
Array
(
[foo] => Array
(
[bar] => Array
(
[baz] => 42
)
)
)