Arrays and Iteration
Reverse Array In Place (Two Pointers)
Walk two indices toward each other from the ends of the array, swapping at each step. Stops when the indices meet or cross. Demonstrates the two-pointer pattern with the smallest possible state.
Algorithm
Canonical input [1, 2, 3, 4, 5, 6, 7] (odd length, middle element stays
put) yields three swap frames and reverses to [7, 6, 5, 4, 3, 2, 1].
Basic Implementation
basic.php
<?php
$arr = [1, 2, 3, 4, 5, 6, 7];
$left = 0;
$right = count($arr) - 1;
while ($left < $right) {
$tmp = $arr[$left];
$arr[$left] = $arr[$right];
$arr[$right] = $tmp;
$left = $left + 1;
$right = $right - 1;
}
echo "[" . implode(", ", $arr) . "]\n";
Complexity
- Time: O(n)
- Space: O(1)
Implementation notes
- PHP: explicit three-line
$tmp = $arr[$left]; $arr[$left] = $arr[$right]; $arr[$right] = $tmp;swap keeps the move visible. The stdlibarray_reverse($arr)(or$arr = array_reverse($arr);) would hide the lesson entirely, and[$arr[$left], $arr[$right]] = [$arr[$right], $arr[$left]];list destructuring would collapse the swap into a single frame. $left = 0and$right = count($arr) - 1use plainintindices;count()returns the fixed length of the canonical array.- The replay distinguishes swap frames from pointer-advance frames so the
viewer can see
$leftand$rightconverge.
two pointers
`$left` starts at index `0`, `$right` starts at `count($arr) - 1`. Each loop iteration swaps `$arr[$left]` and `$arr[$right]` and moves the pointers toward each other.