1

我有一个 3x3 矩阵PHP

2 4 6
5 4 7
8 5 7

假设我在[0,0]元素上 2. 将我在多维数组中的位置存储在变量 $current 中的最佳方法是什么?我正在考虑指针,但不确定如何在 PHP 中执行此操作。

$current = $data[0][0];

没有帮助,因为它不存储上下文。

其次,假设 $current 被存储,那么代码向右、向下、向左和向上查看(窥视)的最佳方法是什么?

谢谢。

4

3 回答 3

2

PHP 中没有指针,您将无法对引用进行指针运算。

您可以使用next()andprev()函数在数组中前进和后退,您可以使用它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];
于 2012-05-21T23:44:56.910 回答
1

只需使用单个值作为索引,并且value % 3 = row,(int)(value / 3) = column为您服务。往上减 3,往下加 3,左减 1,右加 1。还要确保你总是在边界上。

于 2012-05-21T23:46:14.490 回答
0

你能把你当前的位置存储为一个二元素数组吗?

$current = array(0,0)

然后您将使用以下命令访问位置 $current 的变量:

$array[$current[0]][$current[1]]

如果您正在遍历数组——我假设使用一对嵌套循环——您只需$current[0]在外循环中递增$current[1]并在内循环中递增(并在外循环中将其设置为零)。请注意,这会将您的“垂直”位置存储在 $current 的第一个元素中。如果您希望顺序像标准笛卡尔坐标一样是 (x,y),只需反转这两个元素。

于 2012-05-21T23:49:41.090 回答