Laravel遍历嵌套Collection数组提取u_id逗号分隔输出报错
报错原因
遍历$selectedUsers外层索引数组时,循环得到的$selectedUser是Illuminate\Support\Collection实例,并非携带u_id字段的stdClass对象,直接访问实例上不存在的u_id属性就会触发报错。
实现方法
推荐写法(Laravel Collection 原生方法,最简洁)
直接调用Collection封装的方法完成扁平化取值、拼接,不需要手动写多层循环:
$uIdString = collect($selectedUsers) ->flatten() ->pluck('u_id') ->implode(',');
执行后$uIdString就是所有u_id用逗号拼接好的字符串。
修正原有foreach逻辑
原代码只遍历了外层数组,没有遍历内层的Collection实例,补全第二层遍历即可:
$listUser = []; foreach ($selectedUsers as $userCollection) { // 遍历当前Collection实例下的所有stdClass对象 foreach ($userCollection as $userObj) { $listUser[] = $userObj->u_id; } } // 最终拼接为逗号分隔字符串 $uIdString = implode(',', $listUser);
注意:不要尝试直接读取Collection的受保护
items属性取值,受保护属性无法在类外部直接访问,使用Collection提供的公开方法操作才是合规用法。
内容的提问来源于stack exchange,提问作者Satheesh Kumar
相关产品推荐
相关产品推荐

