The entire point of methods is to make the as descriptive and concrete as possible. If you simply pass an array you have no control over what is sent to the function and what is required by the function to work. This quickly leads to errors and bugs.
If you find yourself in the situation where a method grows too big, you are most likely constructing a function that does too much. A function should do one thing. Learn to split them up and call other functions instead.
Lastly, you should adapt to OOP and pass objects instead of a bunch of separate variables that are not connected in a meaningful way. Instead of this:
public function addToCart($sku, $itemPrice, $itemCost, $itemName, $itemColor .... ) {}
You should do something like this:
public function addToCart(Item $item) {}
Learning how to structure bigger projects, classes and system is a difficult task, and it takes a while to get it right. Even experienced architects and programmers find themselves constructing terrible classes and methods from time to time. Refactoring is key here. Take the time to find the best possible angle to solve a problem, instead of shortcuts such as passing arrays or endless arguments.
ItemandUserinstead of two arrays. Said that, I would prefer second approach that is more flexibleaddToCart(MyProduct $product) { ... }- that way you've got exactly the data you need in a defined format.