我希望使用具有任意数量参数的函数来编辑数组。我到目前为止的代码是:
function setProperty()
{
$numargs = func_num_args();
$arglist = func_get_args();
$toedit = array();
for ($i = 0; $i < $numargs-1; $i++)
{
$toedit[] = $arglist[$i];
}
$array[] = $arglist[$numargs-1];
}
代码的想法是我可以做到以下几点:
setProperty('array', '2nd-depth', '3rd', 'value1');
setProperty('array', 'something', 'x', 'value2');
setProperty('Another value','value3');
导致以下数组:
Array
(
[array] => Array
(
[2nd-depth] => Array
(
[3rd] => value1
)
[something] => Array
(
[x] => value2
)
)
[Another Value] => value3
)
我认为问题在于这一行:
$toedit[] = $arglist[$i];
这条线需要什么来实现所需的功能?
干杯,
答案 0 :(得分:1)
在存储新值之前,您需要走路到目的地。您可以使用参考:
执行此操作function setProperty() {
$numargs = func_num_args();
if ($numargs < 2) return false; // not enough arguments
$arglist = func_get_args();
// reference for array walk
$ar = &$array;
// walk the array to the destination
for ($i=0; $i<$numargs-1; $i++) {
$key = $arglist[$i];
// create array if not already existing
if (!isset($ar[$key])) $ar[$key] = array();
// update array reference
$ar = &$ar[$key];
}
// add value
$ar = $arglist[$numargs-1];
}
但是应该存储此$array
的问题仍然存在。
答案 1 :(得分:1)
class foo {
private $storage;
function setProperty()
{
$arglist = func_get_args();
if(count($argslist) < 2) return false;
$target = &$this->storage;
while($current = array_shift($arglist)){
if(count($arglist)==1){
$target[$current] = array_shift($arglist);
break;
}
if(!isset($target[$current])) $target[$current] = array();
$target = &$target[$current];
}
}
}
答案 2 :(得分:-1)
首先尝试使用foreach循环遍历数组。然后为了处理孩子,你将它传递给一个可以抓住所有东西的子函数。
我还建议使用函数sizeof()来确定数组的大小,这样你就可以知道你的上限了。