CSVファイルをPHP 2D-Arrayにカバーする -- php フィールド と html フィールド と arrays フィールド と file フィールド と csv フィールド 関連 問題

Coverting a csv-file to a PHP 2D-array












5
vote

問題

日本語

私はPHPで新しい、CSVファイルを2Dアレイに読むのに苦労し続けています。次のファイル 'csv / team.csv'を使用します。

<事前> <コード> ID,Nickname,Shirtnumber,Position 1,Jimmy,0,RightBack 2,Mark,3,CentreBack 3,Bryan,17,LeftMidfielder 4,James,23,Striker 5,Andre,69,Goalkeeper

私はできるようにしたいのですが:

  1. 個人の「名前」、「シャツ」、「位置」などを表示します。 HTML / CSS-Webページのプレーヤー。
  2. PHP-Functions <コード> 99887664 、<コード> next()6 、<コード> next() を使用します。
  3. 連想キーを使用します(索引付きキーのほかに)
  4. 私の最初のコードは次のように見えました:

    <事前> <コード> $teamdata = file("csv/team.csv"); foreach ($teamdata as $playerline) { $player = explode(",", $playerline); list($ID,$Nickname,$Shirtnumber,$Position) = $player; { print_r($player); echo "<br>"; print_r(prev($player)); echo "<br>";

    HTMLの結果は次のとおりです。

    <事前> <コード> Array ( [0] => 5 [1] => Andre [2] => 69 [3] => Goalkeeper )

    これはかなりクールに見えます。しかし、

    1. list() はアレイのアレイティブキーを追加しないのですか?
    2. catch0 が機能しないのはなぜですか? (PHPはエラーメッセージまたは警告を与えなかった)
    3. <コード> catch1 を導入することで、 catch2 の配列を作成しました。

      <事前> <コード> catch3

      出力は次のように見えたものです。

      <事前> <コード> catch4

      これは私が必要とするのかほど多くのようです。でも。これが正しい方法である場合は、

      1. 関数 next()15 は使用できません
      2. 関数 next()16 は使用できません
      3. 正しい 'Player-attribute'を選択するためのコーディングは 'complex'です。エラーを簡単にすることができます
      4. 私はCOBOL(LOL)とPascalのプログラミングの背景を持っていますが、PHP(およびJava)は私にとって全く新しいです。どんなアドバイスも大歓迎です!

英語

I'm new at PHP and keep struggling to read a CSV file into a 2D-array. I use the following file 'csv/team.csv':

ID,Nickname,Shirtnumber,Position 1,Jimmy,0,RightBack 2,Mark,3,CentreBack 3,Bryan,17,LeftMidfielder 4,James,23,Striker 5,Andre,69,Goalkeeper 

I would like to be able to:

  1. display the 'name', 'shirtnumber', 'position' etc. of individual players on a html/css-webpage.
  2. use the PHP-functions prev(), current(), next() to navigate between players.
  3. use associative keys (besides indexed keys).

My first piece of code looked like this:

    $teamdata = file("csv/team.csv");     foreach ($teamdata as $playerline) {             $player = explode(",", $playerline);             list($ID,$Nickname,$Shirtnumber,$Position) = $player;     {      print_r($player); echo "<br>";     print_r(prev($player)); echo "<br>"; 

The result in HTML was:

Array ( [0] => 5 [1] => Andre [2] => 69 [3] => Goalkeeper ) 

This looks pretty cool. However,

  1. Why does list() not add associative keys to the array?
  2. Why does prev() not work? (PHP didn't give any error-message or warning)

By introducing $myplayer, I created an array of $player.

    $teamdata = file("csv/team.csv");     foreach ($teamdata as $playerline) {             $player = explode(",", $playerline);             list($ID,$Nickname,$Shirtnumber,$Position) =$player;         $myplayer[]=$player; }         print_r($player); echo "<br>"; echo "<br>";     print_r($myplayer); echo "<br>";echo "<br>";      echo $player[1]; echo "<br>";     echo $player[3]; echo "<br>"; echo "<br>";     echo $myplayer[1][1]; echo "<br>";     echo $myplayer[2][1]; echo "<br>"; 

The output looked like:

Array ( [0] => 5 [1] => Andre [2] => 69 [3] => Goalkeeper )   Array ( [0] => Array ( [0] => ID [1] => Nickname [2] => Shirtnumber [3] => Position )          [1] => Array ( [0] => 1 [1] => Jimmy [2] => 0 [3] => RightBack )          [2] => Array ( [0] => 2 [1] => Mark [2] => 3 [3] => CentreBack )          [3] => Array ( [0] => 3 [1] => Bryan [2] => 17 [3] => LeftMidfielder )          [4] => Array ( [0] => 4 [1] => James [2] => 23 [3] => Striker )          [5] => Array ( [0] => 5 [1] => Andre [2] => 69 [3] => Goalkeeper ) )   Andre Goalkeeper  Jimmy Mark 

This seems pretty much what I needed. However. I ask myself if this is the right way to do it, because:

  1. The function list() can't be used
  2. The function prev() can't be used
  3. Coding for selecting the correct 'player-attribute' is 'complex' and errors can easily be made

I have a background in programming COBOL (lol) and Pascal, but PHP (and Java) is totally new for me. Any advise would be welcome!

</div
              
         
         

回答リスト

1
 
vote
vote
ベストアンサー
 
  1. list は、配列値を変数に割り当てるだけです。
  2. あなたはおそらく最初に見出しを抽出し、それぞれの行と結合して連想配列を取得したいと思うでしょう:

    <事前> <コード> $teamdata = file("csv/team.csv", FILE_IGNORE_NEW_LINES); //get and remove first line to use as keys $headings = str_getcsv(array_shift($teamdata)); foreach ($teamdata as $playerline) { $player = str_getcsv($playerline); //combine keys with values $result[] = array_combine($headings, $player); {
    1. prev を配列で呼び出しているが、配列ポインタはすでに最初の要素にあり、これまでの false が返されます。これは次のとおりです。<コード> var_dump(prev($result));
 
  1. list just assigns array values to variables.

You probably want to extract the headings first and combine that with each row to get an associative array:

$teamdata = file("csv/team.csv", FILE_IGNORE_NEW_LINES); //get and remove first line to use as keys $headings = str_getcsv(array_shift($teamdata));  foreach ($teamdata as $playerline) {         $player = str_getcsv($playerline);         //combine keys with values         $result[] = array_combine($headings, $player); {  
  1. You call prev on the array, however the array pointer is already at the first element so there is no previous and it returns false. This is seen with: var_dump(prev($result));
</div
 
 
 
 
1
 
vote

私は <コード> コメントに非常にLaconic Solution 。 <コード> <コード> $userdata

<事前> <コード> template<typename Fn> int translate_exception(Fn fn) try { fn(); return 0; } catch(std::exception const& e) { LOG("[EE] exception ", e.what()); return -2; } catch( ... ) { LOG("[EE] unknown exception"); return -1; } 0

これはデモ

 

I think str_getcsv comment contains very laconic solution, although it can be improved by using array_walk $userdata parameter:

array_walk($teamdata, function(&$player, $_, $headers) {     $player = array_combine($headers, $player); }, array_shift($teamdata)); 

Here is the demo.

</div
 
 
 
 

関連する質問

2  一行あたりの固定数のパイプ区切りフィールドを読みますか?  ( Reading in a fixed number of pipe delimited fields per row ) 
私は生成されたときにキャリッジの返却に適切にエスケープされていなかったパイプ区切りファイルの束を持っているので、CRまたは改行文字を使用して行を区切ることができません。ただし、各レコードは正確に7つのフィールドを持たなければならないことを知っています。 フィー...

1  複数のバッチファイルを動的に処理し、Spring Batchを使用して対応する出力ファイルの生成  ( Dynamically processing multiple batch files and generating corresponding output ) 
非同期バッチ処理、ジョブの停止、およびいくつかの既存のバッチ処理機能を置き換えるためのいくつかの高度な機能のいくつかを利用するために、Spring Batchの学習を開始しました。今、私は複数のバッチファイルを動的に処理し、入力ファイルごとに「受信」ファイルを...

107  NETでCSVファイルを強く型付けされたデータ構造にインポートする[閉じる]  ( Import csv file to strongly typed data structure in net ) 
現在立つにつれて、この質問は私たちのQ&AMPにとって良いフィットではありません。フォーマット。私たちは事実、参考文献、または専門知識によって支持されることを期待していますが、この質問は...

9  Excelクリップボードデータを受け入れる良いWebベースのグリッドは何ですか?  ( What is a good web based grid that accepts excel clipboard data ) 
貼り付けられたExcelデータを受け入れ、コピー中にExcel準拠のクリップボードデータを発行することができるプラットフォームAnnostic(すなわちJavaScript)グリッド制御/プラグインの任意の推奨事項は? Excelデータは "Normal"ク...

3  Pythonで保存されている単純なデータ  ( Simple data storing in python ) 
各行が簡単に解析できる配列の文字列表現であるように、Pythonを使用してデータを格納するための単純なソリューションを探しています。 私はそのような仕事を簡単にするための図書館を持っているのは確かに私が見つけたすべてのアプローチがそれを仕事にするのにずさんだっ...

116  Java libまたはアプリCSVをXMLファイルに変換するには? [閉まっている]  ( Java lib or app to convert csv to xml file ) 
この質問はスタックオーバーフローガイドラインを満たしていません。現在答えを受け付けていません。 この質問を改善したいですか? ...

0  PowerShell:フィルタリングされた配列の値を設定します  ( Powershell setting values of a filtered array ) 
CSVファイルで読みたい、2つの値に基づいてフィルタリングしたいです。 フィールドと別のフィールドの値を設定します。これが簡単な例です 私が達成しようとしているもののうち: c: forfile.csvの内容: <事前> <コード> firstField,...

88  SQL Server 2005からMySQLにデータをエクスポートする方法[閉じた]  ( How to export data from sql server 2005 to mysql ) 
閉じたこの質問はオフトピックです。現在答えを受け付けていません。 この質問を改善したいですか?質問を更新するスタックオーバーフロ...

1  iPhone加速度計> CSV> Eメール  ( Iphone accelerometer csv email ) 
私が取り組んでいる機械学習プロジェクトのためのデータを収集しようとしています。私がやりたいことはiPhoneから加速度計データを収集し、それをCSVに保存して自分に電子メールで送ってください。私のアプリは現在加速度計からのデータを取得することができますが、進行...

1  OpenOffice.org JavaでCSVをインポートします  ( Openoffice org import csv with java ) 
OpenOffice.org APIを使用してCSVファイルをインポートする方法"CVSテキスト"フィルタを使用して同じファイルを開くときにも提供されるのと同じ機能を使用してこれをやりたいです。 ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有