• 締切済み

多次元配列(リファレンスを用いて)の行にアクセスする方法

多次元配列において、行全体を表示させるには、どのようにしたらよいのでしょうか。 例えば、以下のような(無名)配列を作成したあとに、2行目を全て表示させる方法です。 @ARRAY = ( ["00", "01", "02"], ["10", "11", "12"], ["20", "21", "22"] ); cf: 一次元の場合は @list = ("1", "2", "3"); $ref = \@list; (print $ref; # ARRAY(0x9986)などとアドレスが表示) print @$ref; # 配列の全てが表示 ( print $$ref[1]; # "2"が表示 ) とやれるので、同じように $ref = \@ARRAY; print @$ref[1]; としてみても上手くゆきません。 (print $$ref[1][1]; # "11"が表示 はOK) すみませんが、宜しくお願い致します。

  • Perl
  • 回答数3
  • ありがとう数1

みんなの回答

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.3

次の2つの $ref のデータ構造は同じになります。 (1) @array = ( ["00", "01", "02"], ["10", "11", "12"], ["20", "21", "22"] ); $ref = \@array; (2) $ref = [ ["00", "01", "02"], ["10", "11", "12"], ["20", "21", "22"] ]; (2) のように考えると、多少理解しやすいかも知れません? 個別 $ref->[0]->[1] 行全体 @{$ref->[1]} スライス @{$ref->[2]}[0, 2] ------------------------------------------------------------------------ No.2779127 の質問は締切済みですが、拍子抜け (?) するくらいに簡単な方法が あるようです。参考までに記すと、 my @list = (\@a, \@b, \@c, .....); my @work =(); comb(0); sub comb { my $offset = shift; foreach my $elm (@{$list[$offset]}) { if ($offset == $#list) { print @work, "$elm, "; } else { push @work, $elm; comb($offset + 1); pop @work; } } }

  • kapura
  • ベストアンサー率50% (48/95)
回答No.2

$$ref[1][1]はもともと?、$$ref[1]->[1] あるいは ${$$ref[1]}[1] とか書けるものだと思います。 @ARRAY = ( ["00", "01", "02"], ["10", "11", "12"], ["20", "21", "22"] ); $ref = \@ARRAY; print @{$ref->[1]}; # @{$$ref[1]}

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

$ARRAY[1] == ["10", "11", "12"] なので、これを@でデリファレンスします。 ----------------------------------------------- my @ARRAY = (   ["00", "01", "02"],   ["10", "11", "12"],   ["20", "21", "22"] ); print join(", ", @{$ARRAY[1]} ); #=>10, 11, 12

関連するQ&A

  • php&html printで二次元配列が表示できない

    <html><body> <?php $array1[]= array(); //二次元配列作成 $array1[0][0] = 123; print "$array1[0][0]"; ?> </body></html> というプログラムを作成してみたのですが、printの中身がhtmlでは”一次元配列$array1[0]”と”文字列[0]”という風に読み取られているようで、 表示が Array[0] となってしまいます。 どうにか二次元配列の値を表示する方法はありませんか?

    • ベストアンサー
    • PHP
  • 2次元配列を多次元配列にする。

    2次元配列を多次元配列にする。 PHP5で 2次元目はすべて同じキーの2次元配列を 2次元目のキーごとの内容を共通項にまとめて、 多次元配列にする方法を教えてください。 キーの数は膨大なので、関数の再帰呼び出し で、きれいに処理したいのです。 説明文では説明しきれないので、 やりたいことは↓の通りです。 array[0] = array([one] => "あ", [twe] => "う" [three] => "き"); array[1] = array([one] => "あ", [twe] => "う" [three] => "く"); array[2] = array([one] => "あ", [twe] => "え" [three] => "け"); array[3] = array([one] => "あ", [twe] => "え" [three] => "こ"); array[4] = array([one] => "い", [twe] => "お" [three] => "さ"); array[5] = array([one] => "い", [twe] => "お" [three] => "し"); array[6] = array([one] => "い", [twe] => "か" [three] => "す"); array[7] = array([one] => "い", [twe] => "か" [three] => "せ"); という配列があったら、これを↓のようにしたいです。 array( [あ] => array( [う] => array ("き", "く") [え] => array ("け", "こ") ) [い] => array( [お] => array ("さ", "し") [か] => array ("す", "せ") )   ) どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • テキストを多次元配列に格納したい

    $text="1;2;3:4;5;6:7;8;9:10;11;12:…"; $tmp = split(":",$text); これでtmpで格納された1;2;3、4;5;6、7;8;9、10;11;12をさらに分けて、多次元配列で格納しようと思います。 すなわち多次元配列"arrayについて、 print_r($array[0])の出力結果がArray ( [0] => 1 [1] => 2 [2] => 3 ) print_r($array[2])の出力結果がArray ( [0] => 7 [1] => 8 [2] => 9 ) となるような感じです。 しかし自分ではtmpからarrayへの変換がうまくいきません。 どなたかこのような働きをするコードを教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 多次元配列の計算方法について

    PHP習い始めたばかりで困っているので教えてください。。 多次元配列の要素ごとの計算ループが分からないです。 前提:多次元配列$tajiには15個の要素があり、それぞれに0か1が大量に入っています(具体的には、チェックボックスの回答に因っていて、回答される度に0か1がDBを経由して増えていく感じです) $taji[$rone][] = $row[$rone]; //var_dumpで確認したところちゃんと多次元配列として各要素に値が入っていました。 foreach($taji as $val1){ foreach($val1 as $val2){ print array_sum($val2); }; } …だとエラーになってしまいます。。 希望としては、要素ごとに合計を計算して表示してほしいのですが、 array_sumは多次元配列を無視してしまうのでしょうか?? 全く分からず困っているので、どなたかご教授よろしくおねがいします。

    • ベストアンサー
    • PHP
  • 二次元配列

    質問失礼します。 二次元配列の練習中で、 nijigen = new Array(); nijigen[0] = new Array(0,0,0,0); nijigen[1] = new Array(0,0,0,0); nijigen[2] = new Array(0,0,0,0); nijigen[3] = new Array(0,0,0,0); という配列を作りました。 そして、その配列と同じ配置にされたボタンを押すと、その位置の配列の数値に「1」が代入されるというものです。 そこでですが、「配列の内容が全て1になった時」を検知出来るようにしたいのですが、どのようにすればよいのでしょうか。 よろしくお願いします。 //↓こうなった時に検知したいのです nijigen = new Array(); nijigen[0] = new Array(1,1,1,1); nijigen[1] = new Array(1,1,1,1); nijigen[2] = new Array(1,1,1,1); nijigen[3] = new Array(1,1,1,1);

    • ベストアンサー
    • Flash
  • JavaScriptで2次元配列を扱う方法

    C言語を少しだけやっていました。 JavaScriptで2次元配列作りたいのですが、上手くいきません。 var array[5][5]; array[0][0] = 21; document.write(array[0][0]); ↑を実行しても「21」と表示されません。 new array()とか色々試しましたが上手くいかないので質問させていただきました。 教えてください!

  • 二次元配列が上手くいきません

    Sample.txt 2 2 10 01 php <?php $handle = fopen('sample.txt','r'); // ファイルを開いてファイルポインタを取得 $contents = fread( $handle, 1024 ); // ファイル内容を1024バイト分読み込んで変数に格納 fclose( $handle ); // ファイルを閉じてファイルポインタを破棄 $start_part=array_map("trim",explode("\n",$contents));//$start_partは初期画像の行の配列 改行を削除 $r = $start_part[0];//横サイズを読み込む $g = $start_part[1];//縦サイズを読み込む $start[][]=""; //g行r列の2次元配列を作成 start[x][y],end[x][y]; for($j=0;$j<$g;$j++){ for($i=0;$i<$r;$i++){ $start[$i][$j] = substr($start_part[2+$j],$i,1); } } print_r($start); ?> xamppでphpの勉強をしている初心者です。 理想では$start[0][0]=1 $start[0][1]=0 $start[1][0]=0 $start[1][1]=1となってほしいのですが、 Array ( [0] => Array ( [0] => ) ) としか表示されず困っています。どこを直せばよいのでしょうか。どこが良くないのでしょうか。 ご教授ください。よろしくお願いします。

    • 締切済み
    • PHP
  • 多次元配列を、1次元の配列にする関数を書いてください。

    以下のように、多次元配列の配列をペチャンコにする関数(array_flatten)ってどうかきますか? <?php $arr[0] = 'a'; $arr[1][0] = 'b'; $arr[1][1][0] = 'c'; $arr[1][1][1][0] = 'd'; $arr[1][1][1][1][0] = 'e'; $arr[1][1][1][2] = 'f'; $arr[1][1][2] = 'g'; $arr[1][2] = 'h'; $arr[2] = 'i'; function array_flatten($arg){   処理; } $new_arr = array_flatten($arr); print_r($new_arr); ?> ↓ Array (   [0] => a   [1] => b   [2] => c   [3] => d   [4] => e   [5] => f   [6] => g   [7] => h   [8] => i ) ※関数のなかで、ペチャンコの配列を格納するための新しい配列を宣言すると、 同関数を再帰的に呼び出したら、その配列が初期化されますよね?

    • ベストアンサー
    • PHP
  • C言語の2次元配列における行・列指定

    C言語初心者ですがよろしくお願いします。 C言語では、例えばint型の3行4列の2次元配列を表現するときに、 int array[3][4]; とするようですが、 必ず1つ目の[ ]で行番号を、2つ目の[ ]で列番号を表さなければならないものなのでしょうか。 もし慣習的にそうしているものなら、 行と列を指定する[ ]を入れ替えてプログラムを作成しても問題ないのでしょうか? というのも、メモリ上の割り当てが、 array[0][0] array[0][1] array[0][2] array[0][3] array[1][0] array[1][1] array[1][2] ... ... ... array[2][2] array[2][3] のようになるなら、 その配列をfwrite関数でバイナリデータに書きこんで、再度、列方向に読み込みたい時に、 あらかじめ書きこむ前のデータをarray[列][行]の形で扱っていった方が便利ではないかと思ったのですが、なにか初歩的な勘違いしてたりしますでしょうか? ご教授お願いします。

  • 二次元配列が、勝手に一次元配列になってしまう

    Excelのマクロで、二次元配列を格納したバリアント型を戻り値とする関数を作ったのですが、… 二次元型配列のひとつの要素数が1の時、受け取ったバリアント型変数は、一次元配列になっています。 列ベクトルなら、それもありかな~と思うのですが、なんで、行ベクトルまで、一次元配列にするんだよ~って、困っています。 シートから関数を呼んだ場合は、列ベクトルは列ベクトル、行ベクトルは行ベクトルとして、表示されるので、マクロの中で関数を呼び出した場合も、行列の情報を保持できる方法があるんじゃないかと思ったのですが。 どなたか、ご教示頂けるとありがたいです。 よろしくお願いします。

専門家に質問してみよう