Как мне создать цикл на основе этого массива? - PullRequest
1 голос
/ 30 марта 2010

Я пытаюсь обработать этот массив, сначала проверяя наличие чека, затем экстраполируя данные из количества, чтобы получить действительную цену.

Здесь вводится фиксированное количество товаров без переменного количества.

<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 ]

1 голос
/ 30 марта 2010

Я нашел по крайней мере 2 ошибки:

  1. помещает объявление $newprice вне области действия main, если, в противном случае, оно недоступно вне его, в вызове money_format
  2. перед проверкой значений массивов проверьте, установлено ли значение с помощью функции isset.

Таким образом, код будет

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; ?>
1 голос
/ 30 марта 2010

Вы не должны сравнивать с истиной в операторе if. Просто используйте простое выражение и позвольте PHP проверить его «правильность»:

        if ($value['checked']) { 
            ....
            if ($value['quantity']) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...