質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

244閲覧

phpで複数の列を指定してその値を配列に代入する方法

enigumalu

総合スコア192

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/03/08 08:07

csvファイルの情報を読み込んでその中から10~13列目の項目だけを配列に格納したいのですが
現在考えたやり方だと1列ずつ指定して存在判定するため、簡略化できる書き方を探しています。

$file = file_get_contents($csv_file); $rows = explode("\n", $file); unset($rows[0]); $_list = []; foreach ($rows as $row){ $in_line = explode(",", $row); if (isset($in_line[10])){ $_list[] = $in_line[10]; } if (isset($in_line[11])){ $_list[] = $in_line[11]; } if (isset($in_line[12])){ $_list[] = $in_line[12]; } if (isset($in_line[13])){ $_list[] = $in_line[13]; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

PHP

1if (($handle = fopen($csv_file, "r")) !== FALSE) { 2 while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 3 $datas[]=array_slice($data,9,4); 4 } 5 fclose($handle); 6} 7print_r($datas);

全部並列で

PHP

1$datas=[]; 2if (($handle = fopen($csv_file, "r")) !== FALSE) { 3 while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 4 $datas=array_merge($datas,array_slice($data,9,4)); 5 } 6 fclose($handle); 7} 8print_r($datas);

投稿2019/03/08 08:21

編集2019/03/08 09:10
yambejp

総合スコア114968

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/03/08 08:25

10列目とは1から数えて10列目=0から数えて9列目のことですよね? それとも0から数えて10列目(1から数えて11列目)ということですか?
enigumalu

2019/03/08 09:03

ありがとうございます。array_sliceを利用すると綺麗にかけそうです。 $datas[array(1),array(2)]のように配列の中に配列が入るのを避けたいのですが array_sliceした結果を分解して代入というのは出来るのでしょうか?
yambejp

2019/03/08 09:09

>$datas[array(1),array(2)]のように配列の中に配列が入るのを避けたい 全部並列のデータがよかったのですね よく読んでませんでした、追記しました
guest

0

取りたい列が、連続していない場合を想定したかったので。

php

1 foreach ($rows as $row){ 2 $in_line = explode(",", $row); 3 foreach([10,11,12,13] as $i) { 4 $i--; 5 if(isset($in_line[$i])){ 6 $_list[] = $in_line[$i]; 7 } 8 } 9 }

投稿2019/03/08 08:37

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

php

1<?php 2 3$data = <<<CSV 41,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 51,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 61,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 71,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 81,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 91,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 101,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 11CSV; 12$file = 'sample.csv'; 13file_put_contents($file, $data); 14 15$lines = new SplFileObject($file); 16$lines->setFlags(SplFileObject::READ_CSV); 17$_list = []; 18foreach ($lines as $line) { 19 foreach (range(10, 13) as $i) { 20 if (isset($line[$i])) { 21 array_push($_list, $line[$i]); 22 } 23 } 24} 25var_dump($_list);

投稿2019/03/08 08:22

編集2019/03/08 08:27
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

10,11等の添え字を変数化して範囲指定で回すとか。
(コードとして省略しただけでやってること自体は一緒ですが…)

PHP

1 foreach ($rows as $row){ 2 $in_line = explode(",", $row); 3 for($i=10;$i<=13;$i++){ 4 if(isset($in_line[$i])){ 5 $_list[] = $in_line[$i]; 6 } 7 } 8 }

投稿2019/03/08 08:16

madoka9393

総合スコア992

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問