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

Drupal模块嵌套foreach循环报错:如何正确获取数组sid值

解决Drupal模块中foreach循环的「Invalid argument supplied for foreach()」警告

嘿,这个警告我之前在Drupal开发里也碰到过,问题根源在于你没必要用嵌套foreach遍历整个数组,而且第二层循环处理的对象并不全是可遍历的类型!

问题分析

从你给出的$submission数组结构来看,包含sid的对象明确在$submission['build_info']['args'][1]这个位置,但你当前的嵌套foreach会遍历$submission下的所有元素(比如build_info),再遍历build_info下的所有元素——如果某个元素不是数组或可遍历对象,就会触发这个警告,而且这种遍历完全是冗余的。

最优解决方案:直接定位目标元素

既然已经知道sid的精确位置,直接访问是最高效且不会报错的方式:

// 先做存在性和类型校验,避免Undefined index或调用非对象属性的错误
if (isset($submission['build_info']['args'][1]) && is_object($submission['build_info']['args'][1])) {
    $sid = $submission['build_info']['args'][1]->sid;
}

兼容动态结构的方案(如果数组结构不固定)

如果你的业务场景中$submission的结构可能变化,必须用遍历的方式,那一定要在foreach前添加类型校验,确保当前变量是可遍历的:

foreach($submission as $sub) { 
    // 检查$sub是否是数组或实现了Traversable接口的可遍历对象
    if (is_array($sub) || $sub instanceof Traversable) {
        foreach($sub as $a) { 
            // 同样校验$a是数组,且存在索引1的对象
            if (is_array($a) && isset($a[1]) && is_object($a[1])) { 
                $sid = $a[1]->sid;
                // 找到目标后直接跳出两层循环,提升效率
                break 2;
            }
        }
    }
}

这样既解决了警告问题,又能准确获取到sid值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:51:06