Как название, я сделал это, как показано ниже:
$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 является массивом. Ошибка: Невозможно использовать скалярное значение в виде массива. В любом случае это можно реализовать? Сначала спасибо!
Используйте pass by reference, а не 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) } } } }
Помещение &
перед параметром функции означает, что оно будет передано по ссылке, поэтому изменения в переменной внутри функции будут влиять на исходную переменную, которая была передана. И использование =&
в присваивании присваивает ссылку, поэтому целевая переменная является псевдонимом для источника.