Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中创建二维矩阵_Php_Matrix_2d_Associative - Fatal编程技术网

在php中创建二维矩阵

在php中创建二维矩阵,php,matrix,2d,associative,Php,Matrix,2d,Associative,问题是我必须用php创建一个2D矩阵,其中每一行和每一列都必须有一个键。我试着这么做,但结果是创建了一个与矩阵不相似的二维数组。我使用了以下代码: $x=$row['start_id'] $y=$row['dest_id'] $d=$row['distance'] $this->map[$x][$y]=$d; 这里map是预期的矩阵。此代码的目的是创建一个邻接矩阵,然后用最大距离填充未设置的单元格$x、 上面代码中的$y和$d是从mysql查询的结果派生的 样本输出: Array (

问题是我必须用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 
    )
)

现在的问题是我无法填充空单元格
e、 g.行键=>[10010012]和列键=>[10010015](无法设置值)

感谢您的帮助。如果可能,还应提及如何遍历此类矩阵

我是一个相对的初学者,已经尽力解释了我的问题。但是,如果您发现任何缺点,请指出它们

编辑:矩阵不是方形的。

那应该是

$this->map[10010012][10010015]= 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]);
印刷品

8
2147483647
array(2) {
  [10010015]=>
  int(2)
  [10010016]=>
  int(5)
}
那就是

$this->map[10010012][10010015]= 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]);
印刷品

8
2147483647
array(2) {
  [10010015]=>
  int(2)
  [10010016]=>
  int(5)
}

“不能”?究竟是什么错误消息或什么不起作用?它不是错误消息。我以错误的方式使用关联数组创建矩阵。逻辑上似乎有问题,“不能”?究竟是什么错误消息或什么不起作用?它不是错误消息。我以错误的方式使用关联数组创建矩阵。逻辑上似乎有问题。我不可能手动为每个单元格添加最大距离。它应该是自动使用foreach循环的,只要找到一个未设置的单元格,它就会设置max_距离。但是为什么还要设置max_距离呢?为什么不考虑“不设置等于Max距离”,如示例中所示?第二个getValue(),即
getValue($map,10010014,10010016)
返回最大距离,因为还没有$map[10010014][10010016](尚未)。请详细说明为什么这还不够。没有看到您的编辑。现在我明白你的意思了。我将尝试实施您的解决方案并回复您。非常感谢您的快速回答。我不可能手动为每个单元格添加最大距离。它应该是自动使用foreach循环的,只要找到一个未设置的单元格,它就会设置max_距离。但是为什么还要设置max_距离呢?为什么不考虑“不设置等于Max距离”,如示例中所示?第二个getValue(),即
getValue($map,10010014,10010016)
返回最大距离,因为还没有$map[10010014][10010016](尚未)。请详细说明为什么这还不够。没有看到您的编辑。现在我明白你的意思了。我将尝试实施您的解决方案并回复您。非常感谢您的快速回答。