如何根据此数组创建循环?

时间:2010-03-29 20:59:23

标签: php input foreach

我正在尝试处理此数组,首先测试是否存在支票,然后从数量中推断数据以返回有效价格。

这是固定数量项目的输入,没有可变数量。

<input type="checkbox" name="measure[<?=$item->id?>][checked]" value="<?=$item->id?>">
<input type="hidden" name="measure[<?=$item->id?>][quantity]" value="1" />

这是可变数量项目的输入。

<input type="checkbox" name="measure[<?=$item->id?>][checked]" value="<?=$item->id?>"> 
<input class="item_mult" value="0" type="text" name="measure[<?=$item->id?>][quantity]" />

因此,生成的数组是多维的。这是一个输出:

Array ( 
[1] => Array ( [quantity] => 1 ) 
[2] => Array ( [quantity] => 1 ) 
[3] => Array ( [quantity] => 1 ) 
...
[14] => Array ( [checked] => 14 [quantity] => 999 ) 
) 

这是我用来获取此数组的循环,并首先从表单中检查过程项。我想问题本质上归结为如何构造我的条件语句以合并多维数组?

foreach($field as $value):  
            if ($value['checked'] == TRUE) { 

                $query = $this->db->get_where('items', array('id' => $value['checked']))->row();

                #Test to see if quantity input is present
                if ($value['quantity'] == TRUE) {
                    $newprice = $value['quantity'] * $query->price;

                    $totals[] = $newprice;  
                }

                #Just return the base value if not
                else { 
                    $newprice = $query->price;

                    $totals[] = $newprice; 
                }

            }
            else { } ?>

            <p><?=$query->name?> - <?=money_format('%(#10n', $newprice)?></p>

        <? endforeach; ?>

我的问题:如何更改循环以使用多维数组?

2 个答案:

答案 0 :(得分:1)

你不应该在if语句中与true进行比较。只需使用裸表达式,让PHP检查它的“真实性”:

        if ($value['checked']) { 
            ....
            if ($value['quantity']) {

答案 1 :(得分:1)

我发现至少有2个错误:

  1. $newprice来电
  2. 中,将money_format的声明置于主要范围之外,否则无法在其外部进行宣传
  3. 在检查数组的值之前,检查该值是否使用isset函数设置。
  4. 所以代码将是

    foreach($field as $value):
                $newprice = 0;  
                if (isset($value['checked']) && $value['checked'] == TRUE) { 
    
                    $query = $this->db->get_where('items', array('id' => $value['checked']))->row();
    
                    #Test to see if quantity input is present
                    if (isset($value['quantity']) &&  $value['quantity'] == TRUE) {
                        $newprice = $value['quantity'] * $query->price;
    
                        $totals[] = $newprice;  
                    }
    
                    #Just return the base value if not
                    else { 
                        $newprice = $query->price;
    
                        $totals[] = $newprice; 
                    }
    
                }
                else { } ?>
    
                <p><?=$query->name?> - <?=money_format('%(#10n', $newprice)?></p>
    
            <? endforeach; ?>