ragionamento un po' complicato...
vediamo se questo ti risolve qualcosa
codice:
<?
     function carrello($new=array()) {
              if(!is_array($new)) {
                   return;
              }
              $update = false;
              if(count($_SESSION['carrello']) > 0) {
                 foreach($_SESSION['carrello'] as $key=>$articolo) {
                         $result = array_diff_assoc($articolo, $new);
                         if(count($result) == 1 && array_key_exists('quantity', $result)) {
                            $_SESSION['carrello'][$key]['quantity'] += $new['quantity'];
                            $update = true;
                         }
                 }
              }

              if($update === false) {
                 array_push($_SESSION['carrello'], $new);
              }
     }

session_start();
carrello(array('designScelto'=>$designScelto,'alienScelto'=>$alienScelto,'coloreScelto'=>$coloreScelto,'quantity'=>$quantity));

print_r($_SESSION['carrello']);
?>