1

我在下面有一个循环,它显示了一个数量框,并包含一个包含产品名称的隐藏字段。

我希望将这些绑定在一起,因此如果用户在 100 个输入中更改了输入 90 的数量,那么并希望将隐藏字段输入 90 绑定到它。

然后,这给了我大于零的项目的数量和产品名称。

<?php if(get_field('sizes')) {
while(the_repeater_field('sizes')) { ?>
   <input type="text" name="quantity[]" value="0"> <?php the_title(); ?>
   <input type="hidden" name="product[]" value="<?php the_title(); ?>">
<?php } } ?>

我想将这两者联系在一起,这样它就会回显以下内容:

  • 1 x 产品一
  • 10 x 产品三
  • 20 x 产品八

仅当数量大于零时,如何输出数量和产品名称?


这是使用的实际代码:

    <?php if(get_field('sizes')) { ?>
    <?php while(the_repeater_field('sizes')) { ?>
        <tr>    
            <td width="150"><p><?php echo the_sub_field('size'); ?></p></td> 
            <td width="30" align="right">
                <p>
                    <input type="text" class="quantity" name="quantity[]" style="width:15px;text-align:center!IMPORTANT;margin-left:10px;" value="0">
                    <input type="hidden" class="productinput" name="product[]" value="<?php echo the_title(); ?> - <?php echo the_sub_field('size'); ?>"></td>
                </p>
            </td>
        </tr>
    <?php } ?>
    <?php } else { ?>
        <tr>            
            <td width="150"><p>Quantity</p></td>
            <td width="30" align="right">
                <p>                
                    <input type="text" class="quantity" name="quantity[]" style="width:15px;text-align:center!IMPORTANT;margin-left:10px;" value="0"><?php echo the_sub_field('size'); ?>
                    <input type="hidden" class="productinput" name="product[]" value="<?php echo the_title(); ?>">
                </p>
            </td>
        </tr> 
    <?php } ?>

然后创建准备在电子邮件中输出的代码:

$quantities = array_combine($_POST['product'], $_POST['quantity']);
foreach ($quantities as $product => $quantity) {
    if ($quantity > 0) {
        $productresults = "$quantity x $product";
    }
}

是我正在处理的页面。如果点击“获取报价”,第二步就是上面的代码。


@Sn0opy

foreach($_POST['quantity'] as $check) {
    if($check > 0) {
        $quantityresults .= $check."\n";
    }
}

echo $quantityresults;
4

3 回答 3

2

您显然需要串联迭代这两个数组,以便您可以查看产品的数量是否非零,从而决定是否应该显示它。

一般来说foreach,这项工作是一个笨拙的工具,要走的路是for循环并使用相同的计数器对两个数组进行索引。但是,在这种特定情况下,您可以轻松地将两个数组转换为一个,其中键是产品名称,数量是使用的值array_combine

$quantities = array_combine($_POST['product'], $_POST['quantity']);

然后,您可以轻松地迭代foreach

foreach ($quantities as $product => $quantity) {
    if ($quantity > 0) {
        echo "$quantity x $product<br>";
    }
}
于 2013-02-14T10:09:48.887 回答
2

我建议在数量数组中使用产品 ID,如下所示:

<input type="text" name="quantity[<?php the_title(); ?>][]" value="0"> 

Ofc,这不是您要寻找的答案,而是应该也可以使用的替代版本。

于 2013-02-14T10:10:37.777 回答
1

Rob,我看到你有一个很好的答案,但你可能想知道一个重要的问题。

通过发布独立的quantities[]and products[],那么您将依赖于两个序列化彼此一致 - 即。两者都按 DOM 顺序序列化 - 因此索引$_POST['quantity']$_POST['product']对应的元素逐个元素。对我来说,这不是一个完全安全的假设 - 请参阅此处选择的答案。

<input>如果每个产品有一个字段,用一个产品 ID 的表示和一个表示数量的值来命名,这会更安全,也更传统。因此,产品 ID 和它们的值保证是一致的。

需要相应地审查客户端和服务器端代码。

于 2013-02-16T03:22:08.480 回答