PHP矩阵向右,向下,向左,在阵列中向上看

时间:2012-05-21 23:41:36

标签: php arrays multidimensional-array matrix

我在PHP中有一个3x3矩阵:

2 4 6
5 4 7
8 5 7

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

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

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

其次,存储$ current的代码(偷看)正确,向下,向左和向上的最佳方式是什么?

感谢。

3 个答案:

答案 0 :(得分:2)

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];

答案 1 :(得分:1)

只需使用一个值作为索引,然后使用value % 3 = row(int)(value / 3) = column。向上减少3,向下减少3,向下减少1,向右增加1.同时确保你总是在边界。

答案 2 :(得分:0)

您可以将当前位置存储为双元素阵列吗?

$current = array(0,0)

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

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

如果你在迭代数组 - 我假设使用一对嵌套循环 - 你只需在外部循环中递增$current[0]并在内部循环中递增$current[1](并设置它在外循环中为零)。请注意,这会将您的“垂直”位置存储在$ current的第一个元素中。如果您希望订单为(x,y),就像标准笛卡尔坐标一样,只需将两个元素反转即可。