1

問題は、各行と列にキーが必要な 2D マトリックスを PHP で作成する必要があることです。これを実行しようとしましたが、行列に似ていない 2 次元配列が作成されます。次のコードを使用しました。

$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 
    )
)

ここでの問題は、
行キー=> [10010012]および列キー=> [10010015]などの空のセルを埋めることができないことです(値を設定できません)

どんな助けでも大歓迎です。可能であれば、そのようなマトリックスをトラバースする方法についても言及してください。

私は比較的初心者で、自分の問題を説明するために最善を尽くしました。ただし、欠点を見つけた場合は、その点を指摘してください。

編集:マトリックスは正方形ではありません。

4

1 に答える 1

5

それは

$this->map[10010012][10010015]= MAX_DISTANCE;

一方、空の/存在しないセルをすべて 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]);

版画

8
2147483647
array(2) {
  [10010015]=>
  int(2)
  [10010016]=>
  int(5)
}
于 2009-12-10T23:00:59.603 に答える