我在php中生成一个数组,看看用户是否对购物车中的产品有折扣。我的代码:
public function actionPrices($request, $action)
{
$cartId = $request->cookie('cartid');
$currentCart = Cart::findOrFail($cartId);
$items = CartItem::where('cart_id','=',$currentCart->id)->get();
$foo = array();
$actionFilters = ActionFilter::where('discount_action_id', $action->id)->lists('filter_options_id');
//if there are no $actionfilters nothing needs an extra check
if (count($actionFilters) == 0)
{
foreach ($items as $item)
{
for($i = 0; $i < $item->amount; $i++)
{
array_push($foo, $item->ProductSize->product->Priceval);
}
}
}
else
{
foreach ($items as $item)
{
$product = $item->ProductSize->product;
$filters2 = ProductFilter::where('product_id', '=', $product->id)->lists('filter_option_id');
$inArray = false;
foreach ($actionFilters as $f) {
//CODE CRASHED CHERE
if (in_array($f, $filters2)) {
$inArray = true;
}
}
if ($inArray)
{
for($i = 0; $i < $item->amount; $i++)
{
array_push($foo, $item->ProductSize->product->Priceval);
}
}
}
}
sort($foo);
return $foo;
}
Hos有可能在那个地方崩溃吗?
错误表明参数2($ filters2)不是数组。但我得到带有lists()函数的$ filters2,它返回array。来自文档
如果要检索包含单个列值的数组,可以使用lists方法。
我该如何避免错误?
答案 0 :(得分:1)
这是因为Query Bulders's lists
方法返回Illuminate\Support\Collection
所以你可以这样做
$filters2 = ProductFilter::where('product_id', '=', $product->id)->lists('filter_option_id')->toArray();
即。将集合转换为数组。还是......
if ($filters2->contains($f)) {
$inArray = true;
}
即。使用Collection的方法代替php数组。
请参阅more
编辑:哎呀! Laravel doc错误地提到:列表返回一个数组。
答案 1 :(得分:0)
对于每种情况,$ filters2都不是一个数组。 尝试快速和肮脏的东西,如:
//CODE CRASHED CHERE
if (is_array($filters2) && in_array($f, $filters2)) {
$inArray = true;
}