期望参数2是数组,给定对象

时间:2016-05-09 23:15:08

标签: php arrays laravel laravel-5

我在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方法。

  

我该如何避免错误?

2 个答案:

答案 0 :(得分:1)

这是因为Query Bulders's lists方法返回Illuminate\Support\Collection

的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;
            }