2011-01-13 9 views
0

におけるマルチレベルアレイに1つのレベルの配列を変換します私はアレイと、このようなVARを持っているPHP

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

今、私はこのような配列に変換したい:

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

これがすべき$ arrPs配列に何個の値が入っていても動作します。

希望はこれが理にかなっています。

/Sune

+0

は、私はちょうどそれを見つけなければならない....前にこの質問を見てきた確信している;) –

+0

@middaparka - 種類のアイデアを。ベストプラクティスは、カウント($ arrPs)に基づいてスイッチを作ることですが、それは動的ではなく、将来的には失敗するでしょう:) – sunebrodersen

+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); 
+0

ありがとう - これはちょうど私が探していたものでした! – sunebrodersen

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)); 
1

evalは自分の責任でそれを使用し、このために良いです、データが信頼できるものである場合

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

eval()はどんな状況においてもあなたの最後の手段であるはずです.eval()を使用する場合は、おそらく問題を再考する必要があります。 – Stephen

+0

面白いコメント - **あなた自身の責任で、データを信頼できるものとして使用する** – ajreal

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); 
関連する問題