mmmm...secondo me ci sono alcune cose che dovresti riguardare:
1. evitare di usare il break per fermare il ciclo for, piuttosto cambiare tipo di struttura (es. while);
2. dentro il ciclo for controlli se l'idprodotto è uguale a quello passato alla funzione, e se la condizione non si verifica, automaticamente aggiungi l'elemento in coda all'array. metti caso che il tuo array contenga già 2 elementi:
[0]=>(idprodotto=1,quantità=2)
[1]=>(idprodotto=10,quantità=50)
quando chiami la funzione carrello(10,50), il ciclo for viene eseguito, l'elemento di posizione 0 ha un'id prodotto diverso da quello passato e quindi l'elemento passato viene inserito come un nuovo elemenco, sebbene fosse già presente.
3. altro non saprei...ho fatto delle prove ma continua a non funzionare...