作为标题,我是这样做的:
$array=array(0,1,2,3);
$result=array();
function makeArray($array,$result,$value){
$str='$result';
for ($i=0;$i<count($array);$i++){
$str.='['.$i.']';
}
$str.='="'.$value.'";';
eval($str);
return $result;
}
当param $ result是一个空数组时它可以实现结果,但是当$ result是一个数组时它报告错误。 错误如: 不能将标量值用作数组。 无论如何可以实现它? 先谢谢!
答案 0 :(得分:0)
使用传递参考,而不是eval
:
function makeArray($indexes, &$result, $value) {
$here =& $result;
foreach ($indexes as $i) {
if (!(isset($here[$i]) && is_array($here[$i]))) {
$here[$i] = array();
}
$here =& $here[$i];
}
$here = $value;
}
$array=array(0,1,2,3);
$result=array();
makeArray($array, $result, 3);
var_dump($result);
输出:
array(1) {
[0]=>
array(1) {
[1]=>
array(1) {
[2]=>
array(1) {
[3]=>
int(3)
}
}
}
}
将&
置于函数参数之前意味着它将通过引用传递,因此对函数内部变量的修改将影响传递的原始变量。在赋值中使用=&
分配引用,因此目标变量是源的别名。