You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的foreach循环仅执行一次就停止?

搞定你的循环终止问题!

我一眼就看到了两个导致循环只跑一次的问题,咱们一个个说:

1. 提前返回打断了循环

你把return $pieces;写在if (!in_array($field, $skip))的代码块里了!这意味着第一次找到不需要跳过的字段时,函数直接就返回结果了,后面的循环迭代根本没机会执行。这就像你刚打扫完第一个房间就交差下班,剩下的房间完全没碰。

2. in_array用错了参数

在检查字段是否在fields_active里的时候,你只传了数组$pieces['fields_active'],但in_array需要两个参数:要查找的值和目标数组。你漏掉了要检查的$field,导致这个判断逻辑完全失效。

修正后的代码

function bg_calculation_save ( $pieces ) { 
    $skip = array('company_name', 'logo', 'screenshot', 'highlight_1', 'highlight_2', 'highlight_3', 'awards'); 
    
    foreach ($pieces[ 'fields' ] as $field => $value) { 
        if (!in_array($field, $skip)) { 
            // 计算分数
            $points = bg_calculate_points($field) * bg_score_weights($field); 
            // 设置对应_points字段的值
            $pieces[ 'fields' ][ $field . '_points' ][ 'value' ] = $points; 
            
            // 如果当前字段不在待保存列表里,就加进去
            if (!in_array($field, $pieces[ 'fields_active' ])) { 
                $pieces[ 'fields_active' ][] = $field; 
            } 
        }
    }
    // 所有字段处理完再返回结果
    return $pieces; 
} 
add_filter( 'pods_api_pre_save_pod_item_vpn', 'bg_calculation_save' );

关键修改点

  • 把return $pieces;移到了foreach循环外面,确保所有符合条件的字段都能被处理一遍。
  • 修复了in_array的参数,补上了第一个参数$field,让判断逻辑正常工作。

这样修改后,你的循环就能完整遍历所有需要处理的字段啦!

内容的提问来源于stack exchange,提问作者TinyTiger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:58:54