2016-03-02 32 views
0

這裏是我的嵌套的foreach循環從數據庫獲取數據PHP創建嵌套的循環中單獨列

while($attrib_rec = tep_db_fetch_array($attributes)) { 

foreach($options_values as $option => $options_value){ 

foreach($options_value as $options_value_key => $each_value){ 

      //make separate arrays of "option" 
      print 'option = '.$option.' , value = '.$each_value.'<br />'; 

     } 
    } 
} 

我從這些循環得到的輸出是

option = Type , value = GOLD 
option = Type , value = SILVER 
option = Type , value = BRONZE 
option = Purity , value = Rough 
option = Purity , value = Neat 
option = Purity , value = Mixed 
option = Purity , value = Random 
option = Model , value = Old 
option = Model , value = latest 
option = Model , value = GOLD 1.0 
option = Model , value = GOLD 1.1 
option = Model , value = GOLD 1.2 
option = Model , value = GOLD 1.3 

我想達到的目標是將每個相同的「選項」值保存到一個數組中。 例如從上面的輸出我應該得到3個數組。即

$type = array('GOLD', 'SILVER', 'BRONZE'); 
$purity = array('Rough', 'Neat', 'mixed', 'Random'); 
$model = array('Old', 'Latest', 'GOLD 1.0', 'GOLD 1.1', 'GOLD 1.2', 'GOLD 1.3'); 

對while循環的每次迭代它應該根據「選項」使數組數量。

如果第一次在while循環的下一次迭代中生成3個數組(如本例中),它可能會生成2個或4個數組,這取決於從DB獲取的相同數量的「Option」。

+0

您正在使用嵌套的'foreach'循環會顯示輸出,就像它顯示的那樣...您可以使用過濾器或'group by' – Lakshya

回答

1

此刻你是剛剛打印值,而不是將其存儲在一個數組中。你可能想更改您的代碼是這樣的:

$options = array(); 

while($attrib_rec = tep_db_fetch_array($attributes)) { 

    foreach($options_values as $option => $options_value){ 

     foreach($options_value as $options_value_key => $each_value){ 

      //Store each value by their collective key 
      $options[$option][] = $each_value; 
     } 
    } 
} 

這將創建一個數組,看起來像這樣:

$options = array(
    'type' => array('GOLD', 'SILVER', 'BRONZE'), 
    'purity' => array('Rough', 'Neat', 'mixed', 'Random'), 
    'model' => array('Old', 'Latest', 'GOLD 1.0', 'GOLD 1.1', 'GOLD 1.2', 'GOLD 1.3'), 
); 

你可以得到這個在屏幕上是這樣的:

echo "<pre>".print_r($options, true)."</pre>"; 

這是如何工作:

研究所ead打印每個值,我們將它們放入一個多維數組中,其中每個選項都充當關鍵字,並將值存儲在該數組下的數組中。值得注意的是,如果您有重複鍵值,則這些值將被添加到同一個$option陣列中。如果這種行爲不受歡迎,那麼只需使用唯一標識符,如果您不需要關聯關鍵字,則可以使數組鍵每次循環迭代增加一次。

如果你想獲得每個值了,你可以這樣做:

echo "<pre>".print_r($options['purity'], true)."</pre>"; 

這將打印出來的值Rough, Neat, Mixes, Random

可以找到更多關於多維數組here它簡單地說明:

多維數組是含有一個或多個數組的數組。

+0

感謝@Henders的解釋。我非常接近解決我的實際問題。 我想知道如何實現嵌套的foreach生成組合(其他每個值的圖像) 如果我有單獨的 '$ type = array('GOLD','SILVER','BRONZE'); $ pure = array('Rough','Neat','mixed','Random'); $ model = array('Old','Latest','GOLD 1.0','GOLD 1.1','GOLD 1.2','GOLD 1.3');' 我會使用 '的foreach($類型$基){ 的foreach($純度爲$ attR1位){ 的foreach($模型作爲$ attR2位){// 72個的組合將產生(3 * 4 * 7) } } }' –

0

您可以使用一個簡單的數組對它們進行分類。看看這個例子:

$sorted_options = array(); 
while($attrib_rec = tep_db_fetch_array($attributes)) { 
    while($attrib_rec = tep_db_fetch_array($attributes)) { 

     foreach($options_values as $option => $options_value){ 

      foreach($options_value as $options_value_key => $each_value){ 

       sorted_options[$option][] = $each_value; 
      } 
     } 
    } 
} 
echo '<pre>'.print_r($sorted_options, true).'<pre>'; 
0

試試這個 -

<?php 
    $arr = array(); 
    while($attrib_rec = tep_db_fetch_array($attributes)) { 

    foreach($options_values as $option => $options_value){ 

    foreach($options_value as $options_value_key => $each_value){ 

       //make separate arrays of "option" 
       //print 'option = '.$option.' , value = '.$each_value.'<br />'; 
       $arr[$option][]=$each_value; 
      } 
     } 
    } 
    print_r($arr); 
    ?>