I think the extra array() construct is creating an extra level in the added data.
Try array_push($oldarray,array("quantity"=>"3","price" => 5.99));
without the extra one with the array("3"=>... part.
A good way to see what you've build is to use:
print implode("<BR>",array_keys($array));
and see what you're getting back.
You can walk sub arrays easily too:
($array is multi-dimensional below):
foreach ($array as $part){print implode("<BR>",array_keys($part));
}
Happy hunting