В PHP нет указателей, и вы не сможете делать указательную арифметику по ссылкам.
Вы можете использовать функции next()
и prev()
для перемещения вперед и назад в массиве, и вы можете использовать key()
, чтобы узнать, где вы находитесь. current()
вернет значение, сохраненное в текущей позиции в массиве (вроде как разыменование указателя).
Все они работают на одном уровне глубины, поэтому вы не можете найти позицию в многомерном массиве.
Наилучший способ работы с многомерными массивами, скорее всего, просто будет хранить и увеличивать/уменьшать значения X и Y, которые идентифицируют позицию в массиве. Поскольку массивы на PHP реализованы внутри как хеши, ссылка $data[$x][$y]
очень быстрая, независимо от того, что $x
и $y
содержат.
Например, если текущая позиция в матрице (1, 1), вы можете иметь переменную запоминанию это:
$current = ['x' => 1, 'y' => 1];
Чтобы узнать, что хранится там, посмотреть его:
$x = $current['x'];
$y = $current['y'];
$data[$x][$y];
Чтобы узнать, что хранится в верхнем левом углу этой позиции, можно получить позицию, просто вычитание 1 из координат текущей позиции, а затем смотрит эту позицию:
$x = $current['x'] - 1;
$y = $current['y'] - 1;
$data[$x][$y];
Это путь. модульные арифметические работы здесь потрясающие. – goat
Это действительно более элегантное решение. Он работает для квадратных или прямоугольных матриц, но не для тех, где строки или столбцы могут иметь различное количество элементов. Я не знаю контекста проблемы OP, но это, вероятно, не проблема. – octern