the authorize.net gateway is very easy to hook into API-wise and they even have sample PHP scripts.
We use ECX as our merchant account provider.
My only complaint about authorize.net is lately it has been timing out trying to send back results to my script about the order. I use SIM (simple integration method) which basically means I just pass some insecure data to their gateway (amounts, items ordered, customer id, etc.) and then the credit card entry and validation is on authorize.net's servers. After a success/error occurs on authorize.net's servers, the results are posted back to my site, but they only try for 10 seconds before giving up.
The order goes through fine, but the customer gets a "The script has timed out while reporting results ... contact the store owner to make sure they got the order ... etc." email which makes them lose faith in the store.
You can go with AIM (advanced integration method) where you take care of the credit card stuff yourself and send it to authorize.net over SSL. It is more reliable and probably not prone to the same timeout situation.
I can't speak of any other payment gateways as I have never used any of the others (including PayPal).