2016-03-23 11 views
1

1番目の項目はカテゴリのキー、2番目はそのカテゴリの名前、3番目の項目はサブカテゴリの4番目の名前、5番目のキーサブサブカテゴリは...私はキーが階層を運ぶ新しい配列にデータを格納したいと思います。そのため、次のようになります。多次元配列にデータを格納するPHP

$dat[$ar[1]] = $ar[2]; 
$dat[$ar[1]][$ar[3]] = $ar[4]; 
$dat[$ar[1]][$ar[3]][$ar[5]] = $ar[6]; 
$dat[$ar[1]][$ar[3]][$ar[5]][$ar[7]] = $ar[8]; 
etc. 

$ arの項目数とそれに対応する$ datの深さは固定されています。どのように上記の動作を達成するためのサイクルを記述するには?

+1

あなたは、いくつかを提供することができます入力データの例と期待される出力データのいくつか? –

+0

'$ ar'は1から始まるのではなく、0ベースのスカラー配列ですか?または実際の連想配列ですか? '$ ar = array( 'color'、 'blue'、 'type'、 'plant'、 'flower'、 'tulip')'以上のように '$ ar = array( '1' => 'blue'、 'blue'、 '4' => 'plant'、 '5' => 'plant'、 '6' => 'flower' => 'color'、 '2' 、 '7' => 'flower'、 '8' => tulip ') ' – Huy

+0

配列はインデックス1から始まるスカラー配列です – pedmillon

答えて

0

私は正確なリクエストが可能ではないと思います。 $dat[$ar[1]][$ar[3]] = $ar[4]$dat[$ar[1]] = array($ar[3] => $ar[4])と同じであるとします。それはあなたがこのように二回$dat[$ar[1]]を割り当てるしようとしている意味:

最初の値を上書きし、それが無意味になり
$dat[$ar[1]] = $ar[2]; 
$dat[$ar[1]] = array($ar[3] => $ar[4]); 

。多分あなたが本当にしたいことはあるようなもの:

$dat[$ar[0]]['value'] = $ar[1]; 
$dat[$ar[0]][$ar[2]]['value'] = $ar[3]; 
$dat[$ar[0]][$ar[2]][$ar[4]]['value'] = $ar[5]; 
$dat[$ar[0]][$ar[2]][$ar[4]][$ar[6]]['value'] = $ar[7]; 

これも「の値が」キーとして使用するためにあなたの$ar配列の値になることはありませんことを期待しています。簡単にするために、私はあなたが$ar = array('color','blue','type','plant','flower','tulip')のように、0ベースであるスカラー配列を使用していると仮定するつもりですそして、この試してみてください。そして、あなたの出力は次のようになります

$dat = array(); 
$pnt = &$dat; 
$cnt = count($ar); 
for ($key=0; $key < $cnt; $key+=2) { 
    $value = $ar[$key]; 
    $pnt[$value]['value'] = $ar[$key + 1]; // we assign it to the key 'value' of the current array dimension 
    $pnt = &$pnt[$value]; // we now point to the new array dimension 
} 
echo '<pre>'; 
print_r($dat); 
echo '</pre>'; 

を:

Array 
(
    [color] => Array 
     (
      [value] => blue 
      [type] => Array 
       (
        [value] => plant 
        [flower] => Array 
         (
          [value] => tulip 
         ) 
       ) 
     ) 
) 
関連する問題