I can delete any item from the $_COOKIE[favorites] array like this:
No - when the response is sent back to the browser it should overwrite the current value.
If you want to delete an item from the cookies array do this:
unset($_COOKIE['favorites']);
If you want to delete a cookie on the browser set the cookie with the same name (and path, and domain) but an expiry date in the past.
There is no such thing as a cookie arry client side - you're confusing PHPs syntax for adding items to an array with how HTTP works. It may be that when the request comes back, PHP will create an array from a cookie named 'favourites[]' but there is no such array on the client - just a single value.
setcookie("favorites[]", "value", time()+3600);
creates a cookie named 'favourites[]' which is why its not changed by:
setcookie("favorites[0]", "", time()+3600*24);
Although it would be valid to create new cookies by appending (or embedding) an integer into a string you should avoid using square brackets.
C.