Batman8585, похоже, что это задача на рекурсию.
function knightMoves($start, $steps = 1)
{
$lettersMap = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6, 'g' => 7, 'h' => 8];
$moves = [
[2, 1], [2, -1], [1, 2], [1, -2],
[-1, 2], [1, 2], [-2, 1], [2, 1],
[-2, 1], [-2, -1], [-1, 2], [-1, -2],
[-1, -2], [1, -2], [-2, -1], [2, -1],
];
$result = [];
foreach ((array)$start as $pos) {
$xy = [$lettersMap[$pos[0]], $pos[1]];
foreach ($moves as $move) {
$x = $xy[0] + $move[0];
$y = $xy[1] + $move[1];
if ($x > 0 && $x < 9 && $y > 0 && $y < 9) {
$c = array_search($x, $lettersMap) . $y;
if (!in_array($c, $result)) {
$result[] = $c;
}
}
}
}
if ($steps > 1) {
return knightMoves($result, $steps - 1);
}
return $result;
}
var_dump(knightMoves('d4', 2));
$start - начальная позиция.
$steps - количество ходов, после которых получить все позиции коня на доске.