2013-07-22 42 views
0

可以說我有像的數組:創建複雜的陣列選擇列表

Array 
(
[1] => Array 
    (
     [name] => 85 x 55mm 
     [options] => Array 
      (
       [2] => Array 
        (
         [2] => Ivory Board 
         [3] => Silk Board 
        ) 

       [6] => Array 
        (
         [4] => 330gsm 
         [5] => 400gsm 
        ) 

      ) 

    ) 
) 

內選項可以具有的值的x個。在這個例子中,我想,這將連鎖從根父鍵的選項ID選擇列表(可能超過1個母,但只有在這種情況下,1),但不包括即

<h1>85 x 55mm</h1> 
<select name="1"> 
<option value="1,2,4">Ivory Board, 330gsm</option> 
<option value="1,3,5">Silk Board, 400gsm</option> 
</select> 

試圖重新父名的值 - 關鍵陣列,但努力結合。

+0

你確定你需要數組中的索引值的括號嗎? – collapsar

+0

如果需要,您可以重新安排陣列嗎? – Maximus2012

回答

0

我有一個來自iTunes的軌道信息的複雜陣列,我想要循環的鍵值被稱爲「軌道」。與每個軌道相關的屬性數量會有所不同。

要在數組中循環,我使用foreach循環。

$trackArray = (array_keys)$plist['Tracks'])); 

這設置了我感興趣的密鑰,然後我使用這個循環。

foreach ($trackArray as $value){ 
$trackID = ($plist['Tracks'][$value]['TrackID'); 
$artist = ($plist['Tracks'][$value]['artist']); 
} 

我花了很多的玩耍,以獲得正確的解決方案,我發現的var_dump()和print_r的()函數非常寶貴的。

我覺得有點玩,你可以得到你想要的東西,用我上面使用的東西。

讓我知道你如何繼續。如果你仍然遇到困難,如果我可以再多一點代碼,也許我可以把事情搞砸了。

小號

0

以下重構您的陣列,分組選項特性一起:

$arr = array (
    1 => array (
      'name' => '85 x 55mm', 
      'options' => array (
        2 => array (
          2 => 'Ivory Board', 
          3 => 'Silk Board'), 
        6 => array (
          4 => '330gsm', 
          5 => '400gsm')))); 
$out = array(); 
foreach ($arr as $key => $value){ 
    $out[$key]['name'] = $value['name']; 
    $ops = $value['options']; 
    array_unshift($ops, null); 
    $ops = call_user_func_array('array_map', $ops); 
    $out[$key]['options'] = $ops; 
} 

輸出:

Array(
    [1] => Array(
      [name] => 85 x 55mm 
      [options] => Array(
        [0] => Array(
          [0] => Ivory Board 
          [1] => 330gsm 
         ) 
        [1] => Array(
          [0] => Silk Board 
          [1] => 400gsm 
         ) 
       ) 
     ) 
) 

下面創建爲您的陣列中的每個項目的選擇菜單(在例如,只有一個項目):

$select = ''; 
foreach ($out as $key => $value){ 
    $select .= "<h1>".$value['name']."</h1>\n"; 
    $select .= "<select name='".$key."'>\n"; 
    foreach ($out[1]['options'] as $key2 => $value2){ 
     $select .= "<option value=''>".implode(', ', $value2)."</option>\n"; 
    } 
    $select .= "</select>\n"; 
} 

輸出:

<select name='1'> 
<h1>85 x 55mm</h1> 
<option value=''>Ivory Board, 330gsm</option> 
<option value=''>Silk Board, 400gsm</option> 
</select> 

我無法揣摩出你在選項標籤值來自哪裏,所以我不得不離開的那部分空白。