2016-03-02 31 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); 
    ?>