There's one problem with arrays that I haven't seen mentioned here or by the OP: when inserting a key-value, the type of the key may change.
For instance ["4" => "four"] === [4 => "Four"]
This can lead to some unexpected behaviors. For example, I've already been bitten by `array_merge()` whose result is different if its parameters are arrays with numeric indexes.
array_merge(["4 " => "four"], ["5 " => "five"])
// ["4 " => "four", "5 " => "five"]
array_merge(["4" => "four"], ["5" => "five"])
// [0 => "four", 1 => "five"]