2017-11-17 15 views
1

ダイナミックアレイを作成する必要があり、正しく取得できません。 私はこのような何かが必要です。アレイから目的の出力が得られません

製品名

  • トップを
    • ホワイト
    • ブラック
  • ボトム
    • レッド
    • グリーン

私は私のロジックが正しいについてである必要があり、上記のテキストを生産している、このコード、思い付きました。

$set = array(); 
$set['name'] = "Product Name"; 

$options = array("top", "bottom"); 
$values['top'] = array("White", "Black"); 
$values['bottom'] = array("Red", "Green"); 

echo "<pre>".$set['name']."</pre>"; 
foreach ($options as $o) { 
    echo "<pre>- $o</pre>"; 
    $set['options'][]['name'] = $o; 

    foreach ($values[$o] as $v) { 
     echo "<pre>-- $v</pre>"; 
     $set['options'][]['values']['name'] = $v; 
    } 
} 

上記のコードで作成された配列は次のとおりです。

Array 
(
    [name] => Product Name 
    [options] => Array 
    (
    [0] => Array 
    (
    [name] => top 
    ) 
[1] => Array 
       (
        [values] => Array 
         (
          [name] => White 
         ) 

       ) 

      [2] => Array 
       (
        [values] => Array 
         (
          [name] => Black 
         ) 

       ) 

      [3] => Array 
       (
        [name] => bottom 
       ) 

      [4] => Array 
       (
        [values] => Array 
         (
          [name] => Red 
         ) 

       ) 

      [5] => Array 
       (
        [values] => Array 
         (
          [name] => Green 
         ) 
       ) 
     ) 
) 

私が欲しいの出力は次のようになります。

Array 
(
    [name] => Product Name 
    [options] => Array 
     (
      [0] => Array 
       (
        [name] => top 
        [values] => Array 
         (
          [0] => Array 
           (
            [name] => White 
           ) 

          [1] => Array 
           (
            [name] => Black 
           ) 

         ) 

       ) 

      [1] => Array 
       (
        [name] => bottom 
        [values] => Array 
         (
          [0] => Array 
           (
            [name] => Red 
           ) 

          [1] => Array 
           (
            [name] => Green 
           ) 

         ) 

       ) 

     ) 

) 

私は何をしないのですか?

+0

自分で配列を作成しているならば、あなたが希望する出力 '配列(「トップ」=>配列(「トップとして作成することができます'、' bottom ')); ' – urfusion

答えて

2

あなたが外側に

$set['options'][]['name'] = $o; 
       ^
      this one 

$set['options'][]['values']['name'] = $v; 
       ^
      This one 

を得ただけでなく、アレイに新しい項目を追加したインナーループ(SO 0、1、2のようなインデックスが存在しています)あなたが望むものを生み出すことができませんでした。

あなたは、以下のようなあなたの配列を修正することがあります。

Demo

<?php 

$set = array(); 
$set['name'] = "Product Name"; 

$options = array("top", "bottom"); 
$values['top'] = array("White", "Black"); 
$values['bottom'] = array("Red", "Green"); 

echo "<pre>".$set['name']."</pre>"; 
foreach ($options as $o) { 
    echo "<pre>- $o</pre>"; 

    $vals = array(); 
    foreach ($values[$o] as $v) { 
     echo "<pre>-- $v</pre>"; 
     $vals[] = array('name' => $v); 
    } 
    $set['options'][] = array('name' => $o, 'values' => $vals); 

} 

print_r($set); 

?> 
+1

はい、ありがとうございます – mdgeus

関連する問題