5la*_*x17 1 php 2d associative matrix
问题是我必须在php中创建一个2D矩阵,其中每行和每列必须有一个键.我尝试这样做,但会发生的是创建一个不像矩阵的二维数组.我使用了以下代码:
$x=$row['start_id'];
$y=$row['dest_id'];
$d=$row['distance'];
$this->map[$x][$y]=$d;
这里map是预期的矩阵.此代码的目的是创建一个邻接矩阵,然后用最大距离填充未设置的单元格.上面代码中的$ x,$ y和$ d是从mysql查询的结果派生的.
样本输出:
Array (
[10010012] => Array (
[10010013] => 2
[10010016] => 8
)
[10010016] => Array (
[10010015] => 5
)
[10010013] => Array (
[10010014] => 7
[10010016] => 3
)
[10010014] => Array (
[10010015] => 2
)
)
Run Code Online (Sandbox Code Playgroud)
现在的问题是我无法填充空单元格,
例如row key => [10010012]和column key => [10010015](无法设置值)
任何帮助表示赞赏.如果可能的话,还要提到如何遍历这些矩阵.
我是一个相对初学者,并尽力解释我的问题.但是,如果您发现任何缺点,请指出它们.
编辑:矩阵不是正方形.
那就是
$this->map[10010012][10010015]= MAX_DISTANCE;
Run Code Online (Sandbox Code Playgroud)
另一方面,为什么要将所有空/不存在的单元格设置为MAX_DISTANCE?您可以保留地图不完整,并且每当单元格不存在时,您将MAX_DISTANCE视为其值.
编辑:简单的例子
define('MAX_DISTANCE', PHP_INT_MAX);
$map = array(
10010012 => array ( 10010013 => 2, 10010016 => 8),
10010016 => array ( 10010015 => 5 ),
10010013 => array ( 10010014 => 7, 10010016 => 3),
10010014 => array ( 10010015 => 2 )
);
function getValue(&$map, $x, $y) {
return isset($map[$x][$y]) ? $map[$x][$y] : MAX_DISTANCE;
}
function setValue(&$map, $x, $y, $value) {
if ( !isset($map[$x]) ) {
$map[$x] = array($y => $value);
}
else {
$map[$x][$y] = $value;
}
}
// get an "existing" value from $map
echo getValue($map, 10010012, 10010016), "\n";
// get a "non-existing" value from $map
echo getValue($map, 10010014, 10010016), "\n";
// set a "new" value
setValue($map, 10010014, 10010016, 5);
// $map has been altered
var_dump($map[10010014]);
Run Code Online (Sandbox Code Playgroud)
版画
8
2147483647
array(2) {
[10010015]=>
int(2)
[10010016]=>
int(5)
}
Run Code Online (Sandbox Code Playgroud)