1

私は3x3の行列を持っていますPHP

2 4 6
5 4 7
8 5 7

私が要素上にいると仮定すると[0,0]、2。変数$currentの多次元配列のどこにいるかを格納するための最良の方法は何ですか。私はポインタを考えていますが、PHPでこれを行う方法がわかりません。

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

コンテキストを保存しないため、役に立ちません。

次に、$ currentが格納されていると仮定して、右、下、左、上を見て(覗いて)コードを作成するための最良の方法は何ですか?

ありがとう。

4

3 に答える 3

2

PHPにはポインターがなく、参照に対してポインター演算を実行することはできません。

next()andprev()関数を使用して配列内を前後に移動したり、現在地を確認したりすることができます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];
于 2012-05-21T23:44:56.910 に答える
1

単一の値をインデックスとして使用するだけvalue % 3 = rowです(int)(value / 3) = column。上昇するには3減少し、下降するには3増加し、左に1減少し、右に1増加します。また、常に境界にいることを確認してください。

于 2012-05-21T23:46:14.490 に答える
0

現在の位置を2要素の配列として保存できますか?

$current = array(0,0)

次に、場所$currentの変数に次のようにアクセスします。

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

配列を反復処理している場合(ネストされたループのペアを使用すると仮定します$current[0])、外側のループでインクリメント$current[1]し、内側のループでインクリメントします(外側のループでゼロに設定します)。これにより、「垂直」位置が$currentの最初の要素に格納されることに注意してください。標準のデカルト座標のように順序を(x、y)にしたい場合は、2つの要素を逆にします。

于 2012-05-21T23:49:41.090 に答える