0

作为标题,我这样做如下:

$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;
}

参数$result为空数组时可以实现结果,$result为数组时报错。类似错误:不能将标量值用作数组。无论如何都能实现吗?先谢谢了!

4

1 回答 1

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)
      }
    }
  }
}

放在&函数参数之前意味着它将通过引用传递,因此对函数内部变量的修改会影响传递的原始变量。并且=&在赋值中使用会分配一个引用,因此目标变量是源变量的别名。

于 2013-07-26T05:17:37.143 回答