Assuming your input array has contiguous keys, why not just:
$newArray = array_slice($array, $key1, $key2 + 1);
EDIT
Oh wait, that will only work when $key1 = 0, try this instead:
$newArray = array_slice($array, $key1, ($key2 - $key1) + 1);
This still requires that $key1 < $key2, but from what you say I imagine it always will be.
ANOTHER EDIT
In order to accomplish this without looping the array (with would of course be the easiest way) you need to convert the string keys to numerics so they can be used with array_slice(). This works:
$var = array("one"=>"one","two"=>"two","three"=>"three","four"=>"four");
$key1 = 'one';
$key2 = 'three';
$keys = array_keys($var);
$key1index = array_search($key1, $keys);
$key2index = array_search($key2, $keys);
$newArray = array_slice($var, $key1index, ($key2index - $key1index) + 1, TRUE);
print_r($newArray);
0,2you want to getone , two ,three? Based on what?0and2would returnone,twoandthree0 -> 2, so0 = one, 1 = two, 2 = three