【问题标题】:How to prevent duplicates within foreach PHP如何防止foreach PHP中的重复
【发布时间】:2020-07-27 06:45:48
【问题描述】:

我正在尝试将客户订单备注字段移动到另一个字段组,但由于其他插件覆盖,我也需要覆盖 WooCommerce 模板文件,因此我需要移动此代码:

foreach ( $checkout->get_checkout_fields( 'order' ) as $key => $field ) :
    woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); 
endforeach;

来自:“mytheme/woocommerce/checkout/form-shipping.php
至:“mytheme/woocommerce/checkout/review-order.php”。

现在我得到了重复的字段,如何防止 foreach 循环中的重复?

【问题讨论】:

  • 可能是array_unique()会帮助你
  • @Paritosh Mahale 也许,但在哪里?
  • 在你的 foreach 循环中:foreach ( array_unique($checkout->get_checkout_fields('order')) as $key => $field )
  • 查看我的答案
  • @SteveK 无法与 array_unique 合作

标签: php wordpress woocommerce foreach


【解决方案1】:

您可以维护一个array 来跟踪您已经看到的字段,以免再次添加它们。

$fields_seen = [];
foreach ( $checkout->get_checkout_fields( 'order' ) as $key => $field ) :
    if(!in_array($field, $fields_seen)) {
        woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); 
        $fields_seen[] = $field;
    }
endforeach;

in_array 的参考页面:PHP in_array

【讨论】:

  • 谢谢,但仍然得到 2 个相同的字段。
  • $field$checkout->get_value( $key ) 的值是否重复?如果是后者,那么您需要在 in_array 调用中检查它是否存在。
  • $field 的值重复。
  • 此代码将防止 $field 重复,因为它被添加到数组中,然后检查以下值。您可以通过print_r($fields_seen) 进行确认,以查看您的woocommerce_form_field() 呼叫中包含哪些字段。也许这是 woocommerce 调用本身中的某些内容,这意味着我们没有检查正确的变量或者它在错误的步骤中。
  • $field是什么类型?
【解决方案2】:

您可以使用array_unique() 您的代码将如下所示:

foreach ( array_unique($checkout->get_checkout_fields( 'order' )) as $key => $field ) :
    woocommerce_form_field( $key, $field, $checkout->get_value( $key ) ); 
endforeach;

【讨论】:

  • 由于$field 是数组类型,array_unique() 可能无法按预期工作。
猜你喜欢
  • 2018-05-20
  • 1970-01-01
  • 2015-12-30
  • 2021-10-23
  • 2012-03-24
  • 2015-04-13
  • 2021-09-18
  • 1970-01-01
相关资源
最近更新 更多