Laravel:如何检查请求中的数组是否包含特定值?
你的写法确实有误,我来帮你理清问题并给出正确方案
首先,你当前用的 $request->has('sale_channels_enabled.'.$v_sale_channel->sale_channel_id) 是在检查请求中是否存在一个命名为 sale_channels_enabled.{你的ID} 的独立字段,而不是检查 sale_channels_enabled 这个数组里是否包含目标ID值。这完全不是你想要的逻辑。
因为你提到 sale_channels_enabled 是仅包含销售渠道ID的数组,正确的检查方式应该是先获取这个数组,再判断目标值是否在数组内,这里有几种常用的Laravel写法:
基础写法(兼容所有Laravel版本):
先确认数组存在,再用in_array检查值:if ($request->has('sale_channels_enabled') && in_array($v_sale_channel->sale_channel_id, $request->sale_channels_enabled)) { // 目标ID存在于数组中的逻辑 }更严谨的写法(Laravel 5.6+):
用filled替代has,确保数组存在且不为空:if ($request->filled('sale_channels_enabled') && in_array($v_sale_channel->sale_channel_id, $request->sale_channels_enabled)) { // 执行逻辑 }简化写法:
直接获取数组(默认空数组避免报错),再检查:$saleChannels = $request->input('sale_channels_enabled', []); if (in_array($v_sale_channel->sale_channel_id, $saleChannels)) { // 目标ID存在时的操作 }
额外补充:如果你的sale_channels_enabled是关联数组(比如键是销售渠道ID,值是布尔值或其他),那你原来的点语法写法才会生效,但根据你的描述它是仅存ID的索引数组,所以一定要用上面的方法来检查值是否存在。
内容的提问来源于stack exchange,提问作者vikas hemanth
相关产品推荐
相关产品推荐

