【问题标题】:php foreach loop counts multiple iterations of the same ID as onephp foreach循环将相同ID的多次迭代计数为一次
【发布时间】:2015-05-25 08:17:24
【问题描述】:

我有一个循环让 woocommerce 打印购物车中每个商品的类别名称。这是代码:

function myFunction(){
global $woocommerce;

foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
    $_product = $values['data'];
    $terms = get_the_terms( $_product->id, 'product_cat' );

    foreach ($terms as $term) {
        $_categoryid = $term->name;
        echo $term->name;

    }   
}
}

它可以工作,echo $term->name; 将回显数组,但是,如果我假设有两个相同的项目,也就是 2 个相同的 $_product->id,它只会将它列为回显中的 1 个项目。我需要它单独列出每个项目。

示例

我的购物车里有三件商品

第 1 项)$_product->id 是 20(类别是帽子)

第 2 项)$_product->id 为 20(类别为帽子)

第 3 项)$_product->id 为 15(类别为衬衫)

回声将显示:帽子衬衫

我需要它来展示:帽子帽子衬衫

【问题讨论】:

  • 项目 1 和 2 是相同的,因此它们将是一个数量为 2 的条目

标签: php arrays foreach woocommerce


【解决方案1】:

如果您需要单独的物品,请使用计数器:

  1. 首先找到项目的总数。
  2. 然后为每个打印的项目设置一个计数器。 这是代码。

    function myFunction(){
       global $woocommerce;
    
       foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
    $_product = $values['data'];
    $terms = get_the_terms( $_product->id, 'product_cat' );
    $count = count($terms);
    $i = 0;
    foreach ($terms as $term) {
      $i++;
        $_categoryid = $term->name;
         if($i < $count){
           echo $term->name;
         }
    
    }   
     }
    }
    

【讨论】:

  • 感谢您的回复 :) 它给出了这个错误,虽然 Catchable fatal error: Object of class WC_Product_Simple could not be converted to string in /home/chaugen/public_html/wp-content/themes/DiscoverYourWonder/functions.php on line 203$i++;
  • 对不起,我写错了 ($i name 最后不是对象! (您可以通过 var_dump($term->name); 在分配后的行中检查)
  • 嗯,很高兴我们发现了错误 :) 但是,即使数量为 100,$count 也等于 1,因此 if 语句在名称的 1 个回显后停止。
猜你喜欢
  • 2011-09-07
  • 1970-01-01
  • 2014-10-11
  • 2019-09-22
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多