下記のようなタブ区切りのテキストファイルを
1行目だけをキーにした連想配列にしたいのですが
良い方法はありますでしょうか?
lang
1record.txt(実際のファイルは50列くらいあります。) 2 3id cate_cd name price (←連想配列のkeyに) 456 69 シャンプー 1690 (←連想配列のvalueに) 51136 63 トリートメント 7000 6
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
上記ですが、PHP5.3以降split関数の利用は適応されなくなりました。
参考記事:http://php.net/manual/ja/function.split.php
その為現在では、explode関数などを使用するのが一般的です。
PHPは、バージョンにより利用できる関数が異なるので常に最新の情報を参照するように心がけて下さい。
下記は、サンプルですがrecord.txtのファイル読み込みを行う時点で利用する関数がこのなるかと思います。
<?php $filepath = './record.txt'; $records = array(); if (($handle = fopen($filepath, "r")) !== false) { while (($line = fgetcsv($handle, 1000, "\t")) !== false) { $records[] = $line; } fclose($handle); } // 一行目のみ表示 var_dump($records[0]); // 不要データなのでデータ破棄 $records = array(); exit; ?>投稿2015/06/11 05:51
編集2015/06/11 06:00総合スコア1158
0
ベストアンサー
結局このような形になりました。
lang
1 $buf = file_get_contents($filepath); 2 $lines = explode("\r\n", $buf); 3 $lines = array_filter($lines, 'strlen'); //空行を除去 4 5 $title = array(); 6 $records = array(); 7 $data = array(); 8 9 foreach ($lines as $key => $line ) { 10 if($key == 0){ 11 $title = explode("\t",$line); 12 }else{ 13 $records[$key] = explode("\t",$line); 14 $data[] =array_combine($title, $records[$key]); 15 } 16 } 17 var_dump($data);
回答頂いた皆様ありがとうございました!
投稿2015/06/11 09:09
編集2015/06/15 02:09退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
最初にキーだけ取ってarray_combineするのはどうでしょうか?
また、tsvの読み込みはfgetcsvでも良いかもしれません。
lang
1$data = array(); 2 3if (($fp = fopen('test.tsv', 'r')) !== false) { 4 $key = fgetcsv($fp, 0, "\t"); 5 $keySize = count($key); 6 7 while (!feof($fp)) { 8 $value = fgetcsv($fp, 0, "\t"); 9 if (count($value) == $keySize) { 10 $data[] = array_combine($key, $value); 11 } 12 } 13 fclose($fp); 14} 15 16var_dump($data);
投稿2015/06/11 06:02
総合スコア206
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/06/11 07:11
2015/06/11 09:10
0
タブ区切りの配列が取得できます。
$strbuf = split("\t", $str);
$array = array( $strbuf[0] => $strbuf[$i4], $strbuf[1] => $srbuf[$i4+1], ...
て感じですかね
投稿2015/06/11 02:36
総合スコア1021
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/06/11 02:59
2015/06/11 05:09
退会済みユーザー
2015/06/11 06:51
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/06/11 06:50