在php中将一个级别数组转换为多级数组

时间:2011-01-13 10:58:50

标签: php

我有一个数组和这样的var:

$arrPs =array('p1','p2','pN');
$intVar = 80;

现在我想把它转换成这样的数组:

array(
   'p1'=>array(
            'p2'=>array(
                'pN'=>$intVar
             )
     )
);

无论$ arrPs数组中有多少个值,这都应该有效。

希望这是有道理的。

/淑娜

4 个答案:

答案 0 :(得分:4)

function myWalker($input, $last, &$output = array()) {
    if (count($input) > 1) {
        $val = array_shift($input);
        $output[$val] = array();
        myWalker($input, $last, $output[$val]);
    }
    else {
        $output[$input[0]] = $last;
    }

    return $output;
}

$out = myWalker($arrPs, $intVar);

答案 1 :(得分:1)

eval对此有好处,自行承担风险,如果数据可信,

eval ('$rtn[\''.implode("']['", $arrPs).'\']='.$intVar.';');
var_dump($rtn);

答案 2 :(得分:0)

我建议这样的事情:

function buildNestedArrays($array, $initVar) {
    $current = current($array);
    $next = next($array);
    if ($next === FALSE) {
        return array($current => $initVar);
    } else {
        return array($current => buildNestedArrays($array, $initVar));
    }
}

用法:

reset($arrPs);
print_r(buildNestedArrays($arrPs, $intVar));

答案 3 :(得分:0)

$arrPs = array('p1','p2','pN');
$intVar = 80;

$new_array = array();
$counter   = 1; 
for( $i = count($arrPs); $i >= 0; $i-- )
{
  if( $counter==1)
  {
    $new_array = $intVar;
  }
  else
  {
    $new_array = array( $arrPs[$i] => $new_array);
  }

  $counter++;
}

print_r($new_array);