我正在尝试构建一个列出所有可用项目的表单,用户可以选择一些项目并输入值以在复选框旁边输入元素。
每个复选框旁边都有一个输入文本框。
<?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。
因此,combined_array应该如下所示:
0=>0
Coffee=>44
Egg=>56
0=>0
有人可以帮我吗?
答案 0 :(得分:1)
在不做更多详细说明的情况下,本示例假设您要在$_POST
数据中设置“ combined_array” ...
首先,我将删除“隐藏的” 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