получить значения всех флажков (отмеченных или не отмеченных) с одинаковыми именами - PullRequest
0 голосов
/ 29 июня 2018

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

Каждый флажок имеет текстовое поле для ввода в стороне.

<?php
    foreach ($items as $item):
        $itemID = $item['item_id'];
        $itemTitle = $item['item'];
?>
    <tr>
        <td>
            <li> 
                <div class="checkbox">
                    <input type="hidden" name="selected_items[]" value="0">
                    <input type='checkbox' name='selected_items[]' value='<?php echo $itemID; ?>'/> 
                <?php echo ucfirst($itemTitle); ?>

                </div>
            </li>
        </td>
        <td><input type='number' name='quantities[]' value="0.00" step="0.01" /> </td>
    </tr>
<?php endforeach; ?>

Вот как выглядит форма:

Available Items    |  Qty
--------------------------
[] Bread           |  [input]
[] Coffee          |  [input]
[] Egg             |  [input]
[] Cake            |  [input]

Я хочу, чтобы два массива: selected_items[] и quantities были одинаковой длины, чтобы я мог их объединить.

Если не отмечено, значение следует оставить равным 0.

Итак, комбинированный массив должен выглядеть так:

0=>0
Coffee=>44
Egg=>56
0=>0

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 29 июня 2018

Без дополнительных подробностей в этом примере предполагается, что вы хотите, чтобы "комбинированный массив" устанавливался в ваших $_POST данных ...

Сначала я бы удалил "скрытый" selected_items ввод. Поскольку это массив входных данных, ключи индекса будут не выровнены.

Установка ключа индекса на определенное значение для selected_items, quantities и добавление нового ввода item, должны помочь коррелировать ваши $_POST данные следующим образом:

<?php foreach ($items as $item):
    $itemID = $item['item_id'];
    $itemTitle = $item['item'];
?>
    <tr>
        <td>
            <li> 
                <div class="checkbox">
                    <input type='checkbox' name='selected_items[<?php echo $itemID; ?>]' value='<?php echo $itemTitle; ?>'/>  <!-- Give your input $itemID key -->
                    <?php echo ucfirst($itemTitle); ?>
                </div>
            </li>
        </td>
        <td><input type='number' name='quantities[<?php echo $itemID; ?>]' value="0.00" step="0.01" /> </td>  <!-- Give your input $itemID key -->
    </tr>
    <input type='hidden' name='available_items[<?php echo $itemID; ?>]' value="<?php echo $itemTitle; ?>" />   <!-- Give your input $itemID value -->
<?php endforeach; ?>


<?php
if(!empty($_POST)){
    foreach($_POST['available_items'] as $itemID=>$itemTitle){ // <-- Loop through your "available_items"
        $itemTitle = (!empty($_POST['selected_items'][$itemID])?$itemTitle:0); // <-- this changes the itemTitle based on whether !empty($_POST['selected_items'][$itemID]) 
        $Qty = (!empty($_POST['selected_items'][$itemID])&&!empty($_POST['quantities'][$itemID])?$_POST['quantities'][$itemID]:0); // <-- Checks for quantities 
        $CombinedArray[$itemTitle] = $Qty;
    }
    print_r($CombinedArray);
}
?>

Ваш результат будет примерно таким:

"0"=>0
"Coffee"=>44
"Egg"=>56

Это потому, что у вас есть потенциал для создания дубликатов ключей в вашем $CombinedArray.

Удаление этой строки $itemTitle = (!empty($_POST['selected_items'][$itemID])?$itemTitle:0);:

<?php
if(!empty($_POST)){
    foreach($_POST['available_items'] as $itemID=>$itemTitle){ // <-- Loop through your "available_items"
        $Qty = (!empty($_POST['selected_items'][$itemID])&&!empty($_POST['quantities'][$itemID])?$_POST['quantities'][$itemID]:0); // <-- Checks for quantities 
        $CombinedArray[$itemTitle] = $Qty;
    }
    print_r($CombinedArray);
}
?>

Результатом будет что-то вроде:

"Bread"=>0
"Coffee"=>44
"Egg"=>56
"Cake"=>0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...