• ベストアンサー

CSVデータのn番目だけの値を取得したい

次のCsvファイルがあります。この2番目の列の値(つまり20,35,58・・・)だけを取得(1次元配列に入れる)したいのです。 ,cosmos,himawari 710,20,106 725,35,131 805,58,175 820,97,180 903,110,180 次のようにしましたが、2番目の値だけの抽出が出来ません。どのように直せば良いでしょうか? <?php $TextData = file("./cosmos.csv"); for($i=0; $i<10; $i++){ $cosmos = $TextData[i][cosmos]; } return $cosmos print_r($cosmos); ?> 出力結果 Array ( [0] => ,cosmos,himawari [1] => 710,20,106 [2] => 725,35,131 [3] => 805,58,175 [4] => 820,97,180 [5] => 903,110,180 )

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

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

  • ベストアンサー
回答No.3

回答1です。 >> の”[cosmos]”とは >2列目のデータというつもりだったのですが・・・・。 常識的には[1]を指定すると思うのですが。 >1次元の配列にしてみますが、各レコードの2番目のデータだけを取り出すにはどうすれば良いでしょうか? explodeなどのヘルプはまだご覧になってないですか? http://www.php.net/manual/ja/function.explode.php 配列からn番目のデータの取得方法はすでにおわかりですよね? でも、回答2の方のfgetcsvの方がいいような気がします。 もし、以上のヒント(というかほぼ答え)でもお分かりにならないなら、入門書で基本から学習された方がよろしいかと思います。

spindle
質問者

お礼

ありがとうございました。 試行錯誤を重ね、少しずつ慣れて行きたいと思っています。

その他の回答 (2)

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

コードを例示される際は正確にした方がよいかと思います。 抜粋する場合や省略する場合は特に気をつけた方がよいです。 本題ですが、csvファイルの読み込みについてはfgetcsvを使った方が少し楽かと思います。 http://www.php.net/manual/ja/function.fgetcsv.php それから、csvファイルの内容が不変とも限らないと思うので、forよりforeachでループさせた方がよいでしょう。

回答No.1

>$cosmos = $TextData[i][cosmos]; の”[cosmos]”とは? そもそも$TextDataは1次元で、$TextData[i]は文字列では? $TextData[i]をexplodeかsplitで配列にしてから2番目の値を取り出せばいいのではないでしょうか。

spindle
質問者

お礼

ありがとうございます。 > の”[cosmos]”とは 2列目のデータというつもりだったのですが・・・・。 1次元の配列にしてみますが、各レコードの2番目のデータだけを取り出すにはどうすれば良いでしょうか?

関連するQ&A

  • 配列n番目のデータの取得をしたい。

    初歩的な質問で恐縮です。 2次元配列形式で作った CSVファイル moromoro.txtがあります。 <?php $CsvData = fopen("./moromoro.txt","r"); $line=fgetcsv($CsvData,50,"\t"); print_r($line); ?> としてブラウザでみると Array ( [0] => abcd,efgh,kimn,qrst,uvwx)  とデータが入ります。ところが、データを取り出すため、 以下の通り4行目を追加しブラウザで見ても白いページだけになります。 01: <?php 02: $CsvData = fopen("./moromoro.txt","r"); 03: $line=fgetcsv($CsvData,50,"\t"); 04: list($aaa,$bbb)=$line; 05: return $aaa; 06: print_r($aaa); 076: ?>  ---------- 4行目以下を次のように変更しても 04: $ccc[]=$line[2]; 05: print_r($ccc); 06: ?> Array ( [0] => )  とだけが出てデータの取得が出来ません。何故でしょうか? どうすれば、配列n番目のデータを取り出すことができるでしょうか?

    • 締切済み
    • PHP
  • phpでcsvの処理で困ってます。

    abc.csvというcsvデータを2次元配列にして、その中から指定した行(送信されてきた値$linenum = $_POST['num'];)の5番目の値を1つ増やして、またcsvデータに上書きしたいと思い下記のようにしてみたのですが、うまくいきません。どのようにすればいいのでしょうか、具体的に教えていただければ、ありがたいです。よろしくお願いします。 <?php header("Content-Type: text/html; charset=UTF-8"); $linenum = $_POST['num']; $list = fopen("abc.csv", "w"); $h = 0; while ($array = fgetcsv($list, 1000,",")) {   for ($i = 0; $i < count($array); $i++){   $newarray[$h][$i] = $array[$i]; } $h++;  } $cu = $newarray[$linenum][4]; $cu = $cu + 1; $newarray[$linenum][4] = $cu; fputcsv($list, $newarray); fclose($list); ?>

    • ベストアンサー
    • PHP
  • csvファイルの不定長フィールドの値を取得する方法

    いつもお世話になります。 tst.csv aaa,bbbb,ccc dd,eeeeeee,ffff,gg,hh iii,jj ・・・・・ などのように レコードごとにフィールド数の異なるcsvファイルの 各レコードの値を取得したいのですが、できなくて試行錯誤しています。 フィールドの数が同じならば 例えば、フィールド数が2ならば $array = file("tst.csv"); $c = count($array); $i=0; while($i < $c){ $RowData=$array[$i]; list($fiel1,$fiel2) = split("\,",$RowData); print('$fiel1='.$fiel1.' $fiel2'.$fiel2."<br>"); $i++; } とすればできます。 ところが、フィールド数がいくつあるかわからないので、 list($fiel1,$fiel2) = split("\,",$RowData); を list($fiel) = split("\,",$RowData); としてforeachで値を取り出そうとしましたが、 foreach ($fiel as $Value) { echo $value.'<br>'; } Invalid argument supplied for foreach() というエラーが表示され できません。 何が、Invalid argumentなのか見当がつきません。 各レコードの値を $fiel[1] $fiel[2] $fiel[3] などに格納することはできないものでしょうか。 おわかりになる方なにとぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • csvファイルを2次元配列に格納

    Javaの勉強をしています。 csvファイルを読み込んで2次元配列に格納する方法を教えて下さい。 1次元の配列なら下記のようにして出来たのですが、2次元の配列に格納する方法が分かりません。 ------------------------------ try { File csv = new File("xxx.csv"); BufferedReader brf = new BufferedReader(new FileReader(csv)); while(brf.ready()) { String line = brf.readLine(); String[] data = line.split(","); for(int j=0; j<data.length; j++) { System.out.print(data[j] + "\t"); } System.out.println(); } brf.close(); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } --------------------------- 一度はできないのかと思い、上記の1次元配列のdata[j]を2次元配列のarray[i][j]に代入してみたのですが出来ませんでした。 回答宜しくお願い致します。

    • ベストアンサー
    • Java
  • n番目に大きな値を探索する

    Java初心者です。 Javaで「n番目に大きい値を探索」するプログラムを組みたいのですが、お力を貸してください! 配列データ(10)には各要素に1~10の値が入っています。 ただし配列データをランダムで数値を入れた場合でも動くこと。 ランダムで決めたn番目の値を探索するプログラムです。 ---- int[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //配列データの順番はランダムに並び替わります int n = random.nextInt(data.length) + 1; for(int range = 0; range < n; range ++) { //n番目の要素が見つからなかった場合 if(n > data.length) { System.out.print(n + "番目に大きい要素は見つかりませんでした。"); break; } /* 範囲の先頭から最後まで処理を繰り返し、範囲内の最小値が格納 * されている要素を決定する */ for(int seach = range + 1; seach < data.length; seach ++) { //基準値より探索値が小さかった場合 if(data[range] <= data[seach]) { int swa = data[range]; data[range] = data[seach]; data[seach] = swa; } } //n番目の要素が見つかった場合 if(n -1 == range) { System.out.print(n + "番目に大きい要素は" + data[range] + "です。"); break; } } ---- と言う感じで一度組んでみたのですが、 配列に格納されている値を変更しないようにと言われました。 まず一番大きな値を探し、その値より小さい値を順に探索していけばいいのだと思うのですが、いまいち分かりません。 誰か教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • VBScriptでCSVファイルを読み出したい

    現在VBScriptでCSVファイルを1行ずつ読み取って、2次元配列に格納するプログラムを作成しています。 CSVファイルの中身は、サンプルで shop,price,sales 001,500,700 003,1200,90 024,,18 という並びになっています。 実データは300件くらいです。 1行目のヘッダーを読み飛ばし、2行目のデータから1行ずつ読取、","でsplitを用いてまず1次配列に格納しています。 1次元配列のarrLine(0)=001、(1)=500、(2)=700と入ったデータを 2次元配列arrshopに順次保存?したいのです。 ---------------------------------------------- dim strLine '1行ずつ読込んだデータを持つ dim ntLineNum '行数のカウント dim arrLine '","で区切った要素を持つ一次元配列 dim arrshop '一次元配列になった要素を2次元配列として格納 Do until .AtEndOfStream   strLine = .ReadLine   if 0<>strComp("",Trim(strLine)) then ntLineNum = intLineNum + 1   end if   arrLine = split(strLine , ",")   arrshop = Array(arrLines,i) i = i + 1 loop ----------------------------------------- msgbox arrshop(2)(0) と指定すると「003」出るようにしたいです。 Array関数が上手くないような気もします・・・。 どなたかご教授お願いします(>_<。)

  • Pythonでcsvファイルの中身を書き出したい

    csvファイルの中には数字が配列のように入っています。Pythonを使用してcsvファイルの中身をすべてarrayに書き出したいのですが、どうしたらよいのでしょうか?多次元配列もうまく作れないので教えていただけたら幸いです。

  • aaa.csvとbbb.csvを条件で抽出して並べたいです。

    aaa.csvとbbb.csvを条件で抽出して並べたいです。 $array = file("aaa.csv"); foreach($array as $line){ $line = explode("," , $line); if($line[1] == "0"){ $array = file("bbb.csv"); foreach($array as $item){ $item = explode("," , $item); if($item[2] == $line[0]){ $menu = $item[5]; } } } } aaa.csvの$line[1]が「0」のときbbb.csvの$item[2]と$line[0]が一致するものを表示させたいです。 素人ですいませんが教えてください。

    • 締切済み
    • PHP
  • 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
  • VBAで多次元配列のインデックス番号の取得

    一次元配列の場合=UBOUND(array)-LBOUND(array)で配列の長さが求められますよね。これが二次元配列でarray(4,13)とかの場合上記式を入れても4という値が取得できますが、13という値を求めたい場合はどうすればよいでしょうか

専門家に質問してみよう