使用func_get_args编辑数组

时间:2010-09-20 14:36:15

标签: php multidimensional-array

我希望使用具有任意数量参数的函数来编辑数组。我到目前为止的代码是:

 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];

这条线需要什么来实现所需的功能?

干杯,

3 个答案:

答案 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()来确定数组的大小,这样你就可以知道你的上限了。