• ベストアンサー

30*30のマップファイルを2次元配列に読み込むには。

こんにちは。 30*30とかいうマップファイル ex(map.txt). 0,0,0,0,0 2,3,0,0,0 2,2,1,1,1... こんな感じのファイルを2次元配列に読み 込みたいのですが。 ゲームに使いたいので、横をX座標に対応 させ、map[1][2]=2,map[3][2]=1としたいのです。 次のように作ったのですがうまくいきません。 $temp=file("map.txt"); foreach($temp as $tempmap){ $i=0; $map[$i]=explode(",",$tempmap); $i=$i+1; } マップの読み込みなどをしたことある人など、 なにか分かる人がいましたら、お願いします。 (もっと簡単な方法など)。

  • rheda
  • お礼率69% (257/372)
  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

foreach のたびに$iを0に初期化しているので$map[0]にしか入らないので、$i=0;をforeachの外に出しましょう。 $temp=file("map.txt"); $i=0; foreach($temp as $tempmap){ $map[$i]=explode(",",$tempmap); $i=$i+1; }

rheda
質問者

お礼

回答ありがとうございます。 そうでした。単純なミスでした。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

PHPの配列は自動採番するので以下で十分だと <?PHP $temp=file("map.txt"); foreach($temp as $tempmap){ $map[]= explode(",",$tempmap); } ?>

rheda
質問者

お礼

回答ありがとうございます。 あとで、試してみます。

回答No.2

$iの初期化する位置が間違っています。foreachの前に置けばうまくいきます。 $temp=file("map.txt"); $i=0; foreach($temp as $tempmap){ $map[$i]=explode(",",$tempmap); $i++; } マップ読み込みの効率の良い方法については私は分かりません。 30*30程度ならこれでもそれほど問題ないような気もしますが…。

rheda
質問者

お礼

回答ありがとうございます。 すいません。単純なミスでした。

関連するQ&A

  • 2次元の配列にデータを格納したい

    hoge.txtの様なファイルがあって、この値を2次元の配列に格納したいのですが、簡単に実現することは可能でしょうか? open (FILE, "hoge.txt"); foreach (<FILE>) { # この中で、2次元の配列に格納したい } hoge.txt A  1 B  2 C  3

    • ベストアンサー
    • Perl
  • CSVファイルを二次元配列に格納するプログラム

    前回のソースコードを改変してみました String Str = ""; int Count = 0; try { File inFile = new File("./res/test.csv"); FileReader fr = new FileReader(inFile); BufferedReader br = new BufferedReader(fr); while (br.ready()) { Str = br.readLine(); String[] temp = Str.split(","); int[] m = new int[temp.length]; for (int i = 0; i < temp.length; i++) { m[i] = Integer.parseInt(temp[i]); System.out.print(m[i] + ","); } System.out.println(); Count++; } br.close(); fr.close(); } catch (Exception e) { System.out.println("ファイル読み込みに関するエラー"); } 今一次元配列になっているのですが、これを二次元配列に代入したいのです Countで何回ループしたかによって二次元配列の縦の要素数としたかったのですが、 そうすると横の要素数になるループ中の一次元配列が使えないので困っています

  • foreachで多次元配列を生成

    こんにちわ。 配列をforeachでループさせて、それを多次元配列に入れていくことは可能でしょ うか? 例えば以下のようなデータがあるとします。 ---meibo.dat-------- c21<>田中<>21<>東京 c22<>佐藤<>22<>大阪 -------------------- ---test.php----------------------------------------------------- <? $list_meibo = file("meibo.dat"); foreach($list_meibo as $temp){    $i=split("<>",$temp);    $a=array($i[0] => array("name"=>$i[1],"age"=>$i[2],"ad"=>$i[3]),); } ?> ------------------------------------------------------------------- これでは $a=array("c21"=>array("name"=>"田中","age"=>"21","ad"=>"東京"), "c22"=>array("name"=>"佐藤",age"=>"21","ad"=>"大阪"),); という具合になってくれないでしょうか? これでいくと、配列の最後の要素のみデータに残ります。 どのようにしたらよいでしょうか? ご教授お願いします。

    • ベストアンサー
    • PHP
  • 二次元配列が上手くいきません

    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
  • 多次元配列のソート?

    お世話になります。 外部テキストに保存されているデータを読み込んで、任意のデータで並べ替えたいです。 data.txtには、次の様なデータが格納されてます。 namae<>なまえ<>23<>2008/04/01<> このデータから、なまえで並べ替えたり、日付で並べ替えたりしたいです。 ------------------------------------------------------------------------------------------------ $list = file("data.txt"); foreach ($list as $line) { //配列を設定 list($data01, $data02, $data03, $data04) = explode("<>", $line); print $data02 . ":" . $data04 . "<br>\n"; } ------------------------------------------------------------------------------------------------ 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 2次元配列から1次元配列へのデータ読み込み方法をお尋ねします。

    いつもお世話になります。 readtest.csvというCSVファイルを作り、データを次のように入れています。 a,apple,301,23 b,orange,518,47 c,grape,278,19 d,banana,189,36 この3列目のデータを取り出して1次元配列に入れるため、DBtest.phpを次のように書きました。 01: <?php 02: $Data=file("../readtest.txt"); 03: for ( $i = 0; $i < sizeof( $Data ); $i++ ) { 04: $line=explode(",",$Data[$i]); 05: echo $line[2]; // 301518278189 06: // $xdata=implode(",", $line[2]); 07: } 08: ?> この実行結果は、「301518278189」となります。なぜコンマが入らないのでしょうか? 5行目をコメントアウトして6行目を生かして実行すると、 Warning: implode() [function.implode]: Bad arguments. in C:\Program Files\Apache Group\Apache2\htdocs\DBtest.php on line 6 となります。 3列目のデータを抜き出して配列を作るにはどのようにすれば良いでしょうか? よろしくご教示頂ければ幸いです。

    • ベストアンサー
    • PHP
  • 多次元配列のソート2

    お世話になります。 昨日、質問して出来たと思っていたのですが、日付の方で並べ替えることが出来ませんでしたので、再度質問させて頂きます。 外部テキストに保存されているデータを読み込んで、任意のデータで並べ替えたいです。 data.txtには、次の様なデータが格納されてます。 namae<>なまえ<>23<>2008/04/01<> このデータから、日付で並べ替えたいです。 ------------------------------------------------------------------------------------------------ $list = file("data.txt"); foreach ($list as $line) { //配列を設定 list($data01, $data02, $data03, $data04) = explode("<>", $line); print $data02 . ":" . $data04 . "<br>\n"; } ------------------------------------------------------------------------------------------------ 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 2次元配列のコピーについて

    2次元配列のコピーについて質問があります。 $Aが元の2次元配列、$Bがコピー先だとして、 ${$A}[0..N][0..N]に値が入っているとします。 ここで、$Bの代入を、$B=$Aとやってしまうと、$Aと$Bが連動してしまいます。 ($Bが書き換わったのに$Aも書き換わる) これはなぜなのでしょうか。 また、$Bの代入を、配列を走査して foreach (0.. $#{$A}) {  my ($i) = $_;  foreach (0.. $#{${$A}[$i]})  {   my ($j) = $_;   ${$B}[$i][$j] = ${$A}[$i][$j];  } } とすれば問題ないのですが、あまりスマートだと思えません。 もっとスマートにコピーする方法はありますか?

    • ベストアンサー
    • Perl
  • 多次元配列から任意の配列を取り出す

    すいません。phpを初めて勉強中なのですが、少し分からない事があります。 例えば以下のような二次元配列なのですが、私がやりたい事は「キーを使った並び替え」と 「特定のキーの排除」を行い、任意の順番でテキストを展開させたいです。 foreachで回して配列をソートし3つのテキストを展開するまではできたのですが、 キーが「y」となっている配列のみを抜き出すというのがどうすれば良いのでしょう? いろいろサイトを見てるのですが、特定のキーが入っている配列を抜き出す(または排除) というのは無く、値を抜き出すなどしかありません・・。 $food["1"]["y"]= "aaa1.txt"; $food["2"]["e"]= "aaa2.txt"; $food["3"]["y"]= "aaa3.txt"; $food["4"]["y"]= "aaa4.txt"; ↓ $food["1"]["y"]= "aaa1.txt"; $food["3"]["y"]= "aaa3.txt"; $food["4"]["y"]= "aaa4.txt";

    • ベストアンサー
    • PHP
  • 二次元配列について

    $recordは二次元配列です。 こういうものを書いておりまして、    foreach($record as $key => $val) { if($key > 18){   for($i=1; $i<=25; $i++){ $data = $record[0].",".$i.",".★★★; ★★★の位置に$record[19][1]、$record[20][1]…$record[19][2]、$record[20][2]… という値を順に入れていきたいのですが、どうしたらよいでしょうか。

    • 締切済み
    • PHP

専門家に質問してみよう