2


0

整数の2次元配列があります。 列順に初期化してから、行順にアクセスします。 すべての行を明示的に繰り返すことなく、PHPで列順に初期化することはできますか

たとえば、Rでは、次のようにすることができます。

my2d = matrix(nrow = 2、ncol = 2)#2x2行列を作成するmy2d [、1] = c( "a"、 "c")#単一のステートメントで列1を初期化するmy2d [、2] = c( "b "、" d ")#単一のステートメントでカラム2を初期化しますprint(my2d [1、])#は" a "" b "print(my2d [2、])#を返します" c "" d "

4 Answer


0


残念だけど違う。 PHPの整数の2次元配列は実際には行の配列として設定され、各行は列の配列です。 理論的には、次のようにできます。

$ data [0] [1]; $ data [1] [1];

しかし、それは実際には単なる繰り返しです。 Rの行列の実装は実際には正しい、多次元配列であるように思えます(そして私はRに関する知識がほとんどないので、私が正しければ申し訳ありません)。 彼らは本当に互換性がありません。


0


このようなものはどうでしょうか。

$ tab = array(array( 'a'、 'b')、// 1行目の配列( 'c'、 'd')、// 2行目); var_dump($ tab);

それはあなたに与えます:

配列0 =>配列0 =>文字列 'a'(長さ= 1)1 =>文字列 'b'(長さ= 1)1 =>配列0 =>文字列 'c'(長さ= 1)1 =>文字列 ' d '(長さ= 1)

ステートメントは1つだけで、繰り返しはありません;-)

これは全体として宣言されており、実際には「列ごと」ではありません。列ごとではなく行ごとに宣言されていると言う人もいるかもしれません - これはPHPではまったく不可能です…​ しかし、それはあなたのニーズに合うようですか?


0


行順にデータを入力し、必要に応じて「列」を読み取る関数を書くことをお勧めします。

関数col($ arr、$ offs){$ t = array();

foreach($ arrは$ rowとして)$ t [] = $ row [$ offs];

$ tを返します。 }

$ my2d = array(); $ my2d [] = array( "a"、 "c"); $ my2d [] = array( "b"、 "d"); print(col($ my2d、0)); // array( "a"、 "b")を返すprint(col($ my2d、1)); // array( "c"、 "d")を返します

編集:あなたが勉強したい場合は、列の順序でデータを入力してから行の順序でそれを読み取るための関数を書くことができます。列内のデータ項目の数が変わってもデータが乱れることを除けば、実際には違いはありません。

いずれにせよ、答えは:いいえ、どこかに繰り返す必要があるでしょう。


0


array_map()の使用を考えましたか? 例えば。

$ my2d = array_map(function($ row、$ col){$ row [1] = $ col; return $ row;}、$ my2d、array( 'a'、 'c'));

それは繰り返しですが、よく隠されています;)