Как добавить (любой тип) значение в массив (по указанному индексу) на языке php

Как название, я сделал это, как показано ниже:

$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 является массивом. Ошибка: Невозможно использовать скалярное значение в виде массива. В любом случае это можно реализовать? Сначала спасибо!

Solutions Collecting From Web of "Как добавить (любой тип) значение в массив (по указанному индексу) на языке php"

Используйте 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) } } } } 

Помещение & перед параметром функции означает, что оно будет передано по ссылке, поэтому изменения в переменной внутри функции будут влиять на исходную переменную, которая была передана. И использование =& в присваивании присваивает ссылку, поэтому целевая переменная является псевдонимом для источника.