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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

2174閲覧

PHP TSV 配列変換

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/08/31 01:48

以下のtsvファイルのデータがあります。

tsv

1id name type price 21001 egg food 200 31002 hook dvd 999 41003 hammer tool 300 51004 すし 食べ物 900

最終的に以下のような配列の形式で出力したいと考えています。

php

1array( 2array( 3'id' => 1001, 4'name' => 'egg', 5'type' => 'food', 6'price' => 200 7), 8array( 9'id' => 1002, 10'name' => 'hook', 11'type' => 'dvd', 12'price' => 999 13), 14array( 15'id' => 1003, 16'name' => 'hammer', 17'type' => 'tool', 18'price' => 300 19), 20array( 21'id' => 1004, 22'name' => 'すし', 23'type' => '食べ物', 24'price' => 900 25) 26);

もしわかる方がいましたらサンプルコードなどで教えていただけないでしょうか?
よろしくお願いします。

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

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

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

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

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

m.ts10806

2021/08/31 01:59

まず、自身が思ったようにやってみてください。そのうえで何が問題なのか、解決したいことを具体的に記載してください。 現状では質問ではなく作業依頼になっています。
guest

回答3

0

めちゃくちゃ簡単なのでヒントだけ書いておきます

  • PHP: fgetcsv - Manual はセパレータを指定するオプションがあり, CSV ではなく TSV にも対応できる
  • PHP: array_combine - Manual をうまく使う
  • while ($row = fgetcsv(...)) { ... } で素直にループ
  • 見出しだけはループ外で処理する

投稿2021/08/31 02:14

編集2021/08/31 02:16
mpyw

総合スコア5223

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

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

0

ベストアンサー

ヒントをいただきありがとうございます。
一応やりたいことはできたので最終コードを置いておきます。

<?php $data = []; $fp = fopen('test.tsv', 'r'); if ($head = fgetcsv($fp, 1024, "\t")) { while (($row = fgetcsv($fp, 1024, "\t")) !== false) { $tmp = []; foreach ($head as $key) $tmp[$key] = array_shift($row); $data[] = $tmp; } } fclose($fp); print_r($data);

投稿2021/08/31 07:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

  1. file() でTSVファイルを配列に読み込みます。

オプションを指定すれば改行無しにできます。

  1. 最初の行を explode() で切り分けて連想配列の項目名にします。

この際「分割代入」が使えたらラクになります。

  1. 次の行以降をループしつつ

上記と同様に値を切り分け
連想配列を組み立て
結果の配列に追加していきます。

まあ、自分ならこんな感じです。

投稿2021/08/31 03:54

takasima20

総合スコア7464

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

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

mpyw

2021/09/09 11:54

ケースバイケースですが、入力する CSV がクォートされた "," を含んでいる場合、explode では正しく処理できないので使うにしても str_getcsv ですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問