PHP array_push error

Irawana picture Irawana · Nov 4, 2013 · Viewed 7.3k times · Source

My code is as below,

$products = array();
for($i=0; $i < sizeof($sales); $i++){
    if(!in_array($sales[$i]['Product']['product'], (array)$products)){
        $products = array_push((array)$products, $sales[$i]['Product']['product']);
    }           
}

I'm getting an error called Fatal error: Only variables can be passed by reference...

I'm using php5

Answer

deceze picture deceze · Nov 4, 2013

You don't use array_push like that, that's your basic problem. You're trying to fix an error you're producing by casting $products to an array, which causes a new error. You use array_push like this:

array_push($products, ...);

You do not assign the return value back to $products, because the return value is the new number of elements in the array, not the new array. So either:

array_push($products, $sales[$i]['Product']['product']);

or:

$products[] = $sales[$i]['Product']['product'];

Not:

$products = array_push($products, $sales[$i]['Product']['product']);

and most certainly not:

$products = array_push((array)$products, $sales[$i]['Product']['product']);

Please RTM: http://php.net/array_push