最后一次迭代值留在数组中

  if ($cart = $this->cart->contents())
  {
        foreach ($cart as $item){
            $order_detail = array(
                'res_id'        =>$this->session->userdata('menu_id[]'),
                'customer_id'   =>$coustomers,
                'payment_id'    =>$payment,
                'name'          => $item['name'],
                'productid'     => $item['id'],
                'quantity'      => $item['qty'],
                'price'         => $item['price'],
                'subtotal'      => $item['subtotal']
            );  
            }
            print_r($order_detail); exit;

when the foreach loop ends, only the last iteration value is left. I need all the values to be within the array.

Change this line

 $order_detail = array(..);

to

$order_detail[] = array(..);

Because order_detail will overwrite each time. Use array instead of simple variable.

$order_detail = array();
if ($cart = $this->cart->contents())
  {
    foreach ($cart as $item){
        $order_detail[] = array(
            'res_id'        =>$this->session->userdata('menu_id[]'),
            'customer_id'   =>$coustomers,
            'payment_id'    =>$payment,
            'name'          => $item['name'],
            'productid'     => $item['id'],
            'quantity'      => $item['qty'],
            'price'         => $item['price'],
            'subtotal'      => $item['subtotal']
        );  
      }
print_r($order_detail); exit;

try this first define the array

$order_detail=array();

array_push($order_detail, array(...));

array declaration must be outside the loop.