PHP在嵌套循环

时间:2016-03-02 11:09:20

标签: php arrays loops foreach nested

这是我的嵌套foreach循环,用于从数据库中获取数据

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循环的每次迭代中,它应根据“options”生成数组。

如果第一次在while循环的下一次迭代中生成3个数组(如本例所示),它可能会生成2个或4个数组,具体取决于我从DB获得的相同数量的“Option”。

3 个答案:

答案 0 :(得分: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>";

这是如何运作的:

我们不是打印每个值,而是将它们放入一个多维数组中,其中每个选项都作为键,值存储在键下的数组中。值得注意的是,如果您有重复的键,则值将添加到同一个$option数组中。如果不希望出现这种情况,那么只需使用唯一标识符,如果您不需要关联键,则只需使数组键递增每次循环迭代。

如果你想获得每个价值,你可以这样做:

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

会打印出值Rough, Neat, Mixes, Random

您可以找到有关多维数组here的更多信息,其中简单解释:

  

多维数组是包含一个或多个数组的数组。

答案 1 :(得分: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>';

答案 2 :(得分: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);
    ?>