• 締切済み

限られた数の配列のみ表示させる

配列の基本的なことを理解していないので、極めて初歩的な質問で申し訳ありませんが、ご教示お願い致します。 csvを読み込み、条件を満たすデータ(ここでは$row[1]がy)だけで配列を作ります。 $handle = fopen("sample.csv", "r"); while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {if($row[1]=="y"){ $data[] = array( $row[0] ,$row[1] ,$row[2] ,$row[3]); } } fclose($handle); すべての行のデータ(ここでは$row[2]のみ)は下記で表示されます。 foreach ($data as $key => $row) { print $row[2]."<BR>"."\n"; 最初から例えば4行目までのみ表示したい場合 for($i=0;$i<4;$i++){ print $data[$i]."<BR>"."\n"; } 上記では、arreyの文字が4個しか表示されませんが、先の例のように各行の$row[2]を表示させるには、どのようにすればよいのでしょうか。 宜しくお願いします。

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

みんなの回答

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

何を聞きたいのかいまいちわかりませんが、foreachで成功している 各行の3番目の要素をforでまわして拾いたいということ? for($i=0;$i<count($data);$i++){ print $data[$i][2]."<br>\n"; } とか

toshi1936
質問者

お礼

ありがとうございました。 不勉強で$data[$i][2]の表示の仕方が間違っていました。

関連するQ&A

  • 配列の中のデータの表示(1件分ずつ)

    いつもお世話になっております。 教えていただいた方のおかげで少しずつ出来上がりつつありますm(__)m またお力をお貸しいただければ嬉しいです。。 POST で取得された配列があります。 [i][handle][sex][body] ↓ (例) [0][][][][]→データなし [1][たくみ][男][晴れが好き] [2][あゆみ][女][雪が好き] [3][みゆ][女][曇りが嫌い] : この配列を、一番目の人($が1)から表示させたいと思っていのですが・・・ for ($i = 1; $i <= count ($handle); $i++) { print $i . "人目の名前:" . $_POST['handle'][$i] . "<br>\n"; print $i . "人目の性別:" . $_POST['sex'][$i] . "<br>\n"; print $i . "人目のPR:" . $_POST['body'][$i] . "<br>\n"; print "<br>\n"; } にすると、同じページに3人分のデータが表示されてしまいます。 そうではなく、1ページ目には1番目の人、2ページ目には2番目の人の表示という風にはできないのでしょうか? 教えてくださいm(_)m

    • ベストアンサー
    • PHP
  • csvファイルを配列へ格納しブラウザへ出力

    <?php #CAT csvファイルを開く $fp_c = fopen("test.csv","r"); #domain csvファイルを開く $fp_domain = fopen("test.csv","r"); print "<table border='1'>"; #fgetcsv関数がfalseを返却するまで実行 while($c_data = fgetcsv($fp_c)){ print "<tr>"; #csvファイルの列数だけ実行 for($i=0;$i<count($c_data);$i++){ print "<td>".$c_data[$i]."</td>"; } print "</tr>"; } print "</table>"; var_dump($c_data); fclose($fp); ?> このようなプログラムをつくってcsvファイルの各セルを配列$c_data[$i]へ格納している(つもり) なのですが、var_dump($c_data);を入れると bool(false)と表示されてしまいます。 このプログラムではcsvファイルの中身を表示できても配列に格納されていないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • UTF8のPHPにSJISのPHPを組みこむ方法?

    charset=UTF-8で動作するPHPファイルがあります。 ****************** UTF-8で動作するPHP ****************** <?php ・・・・・・・・ header("Content-type:text/html;charset=UTF-8"); ?> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; UTF-8"> <title><?=$API_NAME?></title> </head> ・・・・・・・・・・ ・・・・・・・・・・ </html> のような形です。 一方、SJISで動作する下記のPHPがあります。 このS_JIS PHPを上記のUTF-8PHPの中の</head>と</html>の間に組み込みたいと思います。 下記のPHPは、data.csvからファイルの中身を表示させるPHPですが、そのまま放り込むと 文字化けしてしまいます。 (下記のPHP単体だと正しく表示されます。charset=UTF-8下で文字化けします) data.csvの文字コードをUTF-8にする。LF にするなど試してみましたが文字化けしたままでした。 また、#include <string.h>の下に mb_convert_encoding($string, 'utf8', 'sjis'); を入れてみましたが文字化けは直りませんでした。 お手数ですが下記のPHPをUTF8上で正しく表示させる方法が分かりましたらご教授願います。 ****************** SJISで動作するPHP ****************** <? #include <string.h> // CSV ファイルを読み込み、$data配列に格納 $handle = fopen("data.csv", "r"); while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) { if ( strcmp( $row[0] , '110' ) == 0 ) { $data[] = array( 'shop'=>$row[0] ,'priceA'=>$row[1], 'priceB'=>$row[2], 'place'=>$row[3] ); } } fclose($handle); // 列方向の配列を得る foreach ($data as $key => $row) { $shop[$key] = $row['shop']; $priceA[$key] = $row['priceA']; $priceB[$key] = $row['priceB']; $place[$key] = $row['place']; } // 結果の表示 for( $i=0 ; $i<count( $data ) ; $i++ ) { print "$shop[$i] $priceA[$i] $priceB[$i] $place[$i]<br>\n"; } ?>

    • ベストアンサー
    • PHP
  • CSV読み込みの数制限

    CSVを読み込み表示について質問です。 CSVのデータは全部で35件あり読み込む順番に$hyoujijyunの配列に 値をいれています。 やりたいことは1ページ目(view.php?page=1)に配列の先頭から18個の データを表示させそれ以降は2ページ目(view.php?page=2)へ表示させ それぞれのページに次のページへ飛ぶリンクと前へ戻るリンクを表示 したいと思っているのですがこの場合どのようにすればいいの でしょうか? for文を使えばいいのかな?と思い考えてみたのですが応用の方法が わからずです^^; 現状は以下のソースです。hyoujijyunの値が全て表示されています。 if (! $fp = @fopen("data.csv" ,"r")) { print "ファイルを開けません!"; exit(); } while (($filedata= fgetcsv($fp, 10000, ",")) !== FALSE) { $datas[]= $filedata; } fclose($fp); $hyoujijun = array (2, 10, 18, 27, 21, 28, 23, 20, 13, 1, 7, 14, 12, 5, 11, 35, 29);// 並びに規則性はなく実際には35個の値が入る foreach($hyoujijun as $row) { echo "<tr>\n"; echo "<td>{$datas[$row][0]}</td>\n"; echo "<td>{$datas[$row][3]}</td>\n"; echo "<td class=\"{$datas[$row][2]}\">{$datas[$row][3]}</td>\n"; echo "<td>{$datas[$row][4]}</td>\n"; echo "<td>{$datas[$row][5]}</td>\n"; echo "<td>{$datas[$row][6]}</td>\n"; echo "<td>{$datas[$row][7]}</td>\n"; echo "<td>{$datas[$row][8]}</td>\n"; echo "<td>{$datas[$row][9]}</td>\n"; echo "<td colspan=\"3\">{$datas[$row][10]}</td>\n"; echo "</tr>\n"; }

    • 締切済み
    • PHP
  • ?をつけて送信してもだめでしょうか

    ちゃんと表示されるのは これを実行したときで <?php $handle = fopen("jikken.csv", "r"); while (($data = fgetcsv($handle,1000, ",")) !== FALSE) { $num = count($data); if($data[0] == 9999999){ echo $data[1]."<br>\n"; } } fclose($handle); ?> しかし <?php $codex = $_POST['code']; $handle = fopen("jikken.csv", "r"); while (($data = fgetcsv($handle,1000, ",")) !== FALSE) { $num = count($data); if($data[0] == $codex){ echo $data[1]."<br>\n"; } } fclose($handle); ?> このように入れて ~~.php?code=9999999 としても うまくいかないのです 何がおかしいのでしょうか

    • 締切済み
    • PHP
  • ランダム表示について

    ランダム表示について煮詰まってしまって 何とか改善したく思い書き込ませていただきました。 --------------------------------- 表示結果 --------------------------------- データ1 test02 データ2 sample02 データ1 test01 データ2 sample01 データ1 test05 データ2 sample05 データ1 test02 データ2 sample02 --------------------------------- 表示結果がどうしても被ってしまって これを何とか被らないようにしたく 色々模索したのですが解決策が見つかりません。 csvの中身とソースは下記となります。 test.csv --------------------------------- test01 sample01 test02 sample02 test03 sample03 test04 sample04 test05 sample05 test06 sample06 test07 sample07 --------------------------------- ソース --------------------------------- <?php $handle = fopen("test.csv", "r"); while (($data= fgetcsv($handle, 1000, ",")) !== FALSE) { $line[]= $data; } fclose($handle); for($i=0;$i<5;$i++){ $rand= rand(0,count($line)-1); print <<<eof データ1{$line[$rand][0]}<br> データ2{$line[$rand][1]}<br><br> eof; } ?> --------------------------------- 毎ループ、総データ数から一つランダムで選ぶ処理になっているのが原因だと思うのですが その部分を改善しようと調べては試しての繰り返しをしているのですが 一向に改善しません。。。。 どなたかアドバイスを頂ければと思います。 宜しくお願い致します。

    • 締切済み
    • PHP
  • array_randを使って複数表示

    複数の商品をランダムで表示させたいと思っています。 過去の質問で近い記事があったのですが単体商品のランダムだったので この記事を参考に複数表示できないでしょうか? 過去記事 http://oshiete1.goo.ne.jp/qa3181922.html 参考ソース ------------------------------------------------------------ <?php $handle = fopen("test.csv", "r"); while (($data= fgetcsv($handle, 1000, ",")) !== FALSE) { $datas[]= $data; } fclose($handle);//ここまででデータを読む $row= rand(0,count($datas)-1);//ランダムに一つ選ぶ print <<<eof 商品名:{$datas[$row][1]}<br> 説明:{$datas[$row][2]}<br> eof; //商品名と説明を表示 } ?> ------------------------------------------------------------ 理想的な表示結果としては ------------------------------------------------------------ ・たまねぎ ・値段 ・在庫数 ・きゃべつ ・値段 ・在庫数 ・れもん ・値段 ・在庫数 ------------------------------------------------------------ ↓ ------------------------------------------------------------ ・れたす ・値段 ・在庫数 ・れもん ・値段 ・在庫数 ・たまねぎ ・値段 ・在庫数 ------------------------------------------------------------ 誠にすいませんが、詳しく教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP5でCSVの指定行データだけを取得するには?

    PHP初心者です。 下記のような方法で全てのデータを取得する方法があると知りました。 $fp = fopen("url.csv", "r"); while ($data = fgetcsv($fp, 1)) { foreach ($data as $d) { print $d . "<br>\n"; } } しかし指定行、例えば10行目等だけを取得する方法がわかりません。 CSVは1列で1000行ほどあります。 恐れ入りますが具体的なソースを教えてくださいませ。

    • ベストアンサー
    • PHP
  • PHP 全角文字が文字化けまたは表示されない

    PHPでエクセルで作成したcsvファイルから商品一覧を表示させたいのですが。 一覧ページで日本語や大文字英数が含まれるデータが表示されません。 エンコードはいろいろ試してみたのですが、utf-8だと文字化け、EUC_JPやSJISだと表示されなくなってしまいます。 csvから呼び出す際に mb_convert_variables('utf-8', 'sjis-win', $tmp); としても文字化けします。 ちなみに、$dataでprintすると問題なく表示されます。 $data1では上手く表示されません。 なので、for($i=$start;$i<$end;$i++){ 以降でおかしいんだろうなとは思うのですが。 1ページに数件ずつで、次へ次へで移りたいので、ここの部分が必要です。 商品詳細ページで、同じcsvファイルを読みだしてますが、 while ($data = fgetcsv($fp, 10000)) { if($atai==$data[0]){ ・・・・ と書いてこちらは問題なく表示できています。 何が原因か見つけられずに困っています。 お分かりになる方、教えてください。 初心者レベルですので、なるべく具体的に書いていただけると助かります。 よろしくお願いします。 //ファイルからデータを読み込む処理 function inst_view($page=0) { //読み込むファイル名 $filename = FILE_PATH; //データ数をカウントする $row = 0; $data = array(); //CSVファイルの中身をすべて読み込む $handle = fopen($filename, "r"); while (($tmp = fgetcsv($handle, 1000, ",")) !== FALSE) {    if (!empty($choice1) && $choice1 == "4") { $num = count($tmp); if( $tmp[0] == "" ){ }else{ $data[$row]["no"] = $tmp[0]; $data[$row]["hito"] = $tmp[1]; $data[$row]["kuni"] = $tmp[2]; $data[$row]["tochi"] = $tmp[3]; $data[$row]["nen"] = $tmp[4]; $data[$row]["size"] = $tmp[5]; $data[$row]["cm"] = $tmp[6]; $row++; } } } fclose($handle); //降順にする rsort($data); //1ページに表示するデータ数を読み込む $page_length = PAGE_LENGTH; //全ページ数を求める処理 $maxpage = $row/$page_length; $tmp = (int)$maxpage; if($maxpage>$tmp){$maxpage=$tmp+1;} $maxpage--; //現在のページ数からデータ開始と終わりを求める $start = $page * $page_length; $end = ($page * $page_length) + $page_length; //データを格納する配列と、その指標 $cnt=0; $data1 = array(); //データ格納処理(スタートからエンドまで繰り返す。 for($i=$start;$i<$end;$i++){ //最大データ数を超えたら取得終了する。 if($i >= $row){break;} $data1[$cnt]["no"] = $data[$i]["no"]; $data1[$cnt]["hito"] = $data[$i]["hito"]; $data1[$cnt]["kuni"] = $data[$i]["kuni"]; $data1[$cnt]["tochi"] = $data[$i]["tochi"]; $data1[$cnt]["nen"] = $data[$i]["nen"]; $data1[$cnt]["size"] = $data[$i]["size"]; $data1[$cnt]["cm"] = $data[$i]["cm"]; $cnt++; } return $data1; } 別のファイルからinst_viewを呼び出しています。

    • 締切済み
    • PHP
  • 正規表現<置き換え>が実行してくれません

    次のようなスクリプトで、改行マーク\nがたくさんある1行データを<BR>に置換しようとしましたが、表示は\nのままです。原因が分かりません。たぶんこの肝心の箇所のスクリプト・エラーだと思いますが、自分で発見できません。どなたかお教え下さい。 print "Content-type: text/html; charset=sjis-jp\n\n"; print "\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE></TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; # 辞書を読む #ファイルの各行を配列に一括して読み込む。 open(IN, "GermJ.txt"); @list = <IN>; close(IN); $max = $#list; for ($i=0; $i<$max; $i++) {$data = @list[$i]; if (index($data, $tango.' /// ')==0) {$data=~ s/ \n/<BR>/g; print "$data\n"; last; } } print "</BODY>\n"; print "</HTML>\n"; __END__

    • ベストアンサー
    • Perl

専門家に質問してみよう