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 stdlib array_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 = 0 and $right = count($arr) - 1 use plain int indices; count() returns the fixed length of the canonical array.
  • The replay distinguishes swap frames from pointer-advance frames so the viewer can see $left and $right converge.
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.