我在PHP
中有一个3x3矩阵:
2 4 6
5 4 7
8 5 7
假设我在[0,0]
元素上,那么2.在变量$ current中存储多维数组的最佳方法是什么?我正在思考指针,但不确定如何在PHP中执行此操作。
$current = $data[0][0];
没有帮助,因为它不存储上下文。
其次,存储$ current的代码(偷看)正确,向下,向左和向上的最佳方式是什么?
感谢。
答案 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),就像标准笛卡尔坐标一样,只需将两个元素反转即可。