2011-10-19 7 views
1

これは完全に実験的な質問ですが、回答があれば手動のHTMLマークアップ時間が節約できます。PHP Loop - CSVからデータを抽出し、echoを使って配列を返すHTML

それはうまくいくはずですが、私がゴミを話していると助言を感謝することができます。

CSVスプレッドシートの列から列データを取り出し、HTMLマークアップでそれらをエコーするループが必要です。

CSVファイルのルックス

<div id="interactive-map"> 

    <div id="1" class="free" title="Uber"><span>Uber</span></div> 
    <div id="2" class="free" title="Howdy"><span>Howdy</span></div> 
    <div id="3" class="free" title="Love"><span>Love</span></div> 
    <div id="4" class="free" title="Gimme"><span>Gimme</span></div> 
    <div id="5" class="free" title="Totally"><span>Totally</span></div> 
    <div id="6" class="free" title="Spank"><span>Spank</span></div> 

</div> 

...だから結果は次のようになります...

<?php 

    // here it needs to load the CSV file and get the column data and output them as variables (I guess) 

echo <div id="interactive-map"> 

    // here a loop needs to begin to output this line off HTML... 
    // with the arrayed variables... 

<div id="[varible-1]" class="[varible-2]" title="[varible-3]"><span>[varible-3]</span></div> 

    // loop finished once no more rows left in CSV 

echo </div> 

?> 

を私はPHPを書くことはできませんが、これは私がループ作業を想定する方法でありますこのように...

http://www.motocom.co.uk/test/varible.jpg

任意のヘルプまたはアドバイスは、本当に驚くべきだろう!おかげ

<?php 

     $file = fopen('file.csv', 'r'); 
     $fields = array(); 

     if ($file) { 
     while (($data = fgetcsv($file)) !== false) { 

      if(empty($fields)) { 
       $fields = $data; 
        continue; 
       } 


      $row = array_combine($fields, $data); 

      $output = sprintf("% is ID, % is CLASS, % is NAME", 
       $row['id'], 
       $row['class'], 
       $row['name']); 

      echo $output; 

      } 

     fclose($file); 
    } 

?> 

それはかなりありません

id,class,name 
1,free,Uber 
2,free,Howdy 
3,free,Love 
4,free,Gimme 
5,free,Totally 
6,free,Spank 

以下のPHP ...テキストとして表示FIRST ANSWER

マイCSVの下に次のBELOW // UPDATE ...正しく働く、何が間違っているの? HTMLを追加することに関して

、私はエコーされたテキストがどこにあるの内側にマークを入れて、それが混乱: -/

それは、CSVファイルから目的の情報ものをエコーではなく、されています。

答えて

2

ファイルを読むには、組み込みのfgetcsvをループ内で使用するのが一番簡単です。あなた自身の解析コードを調理することはできますが、フィールド区切り文字やエスケープ文字の存在下で正しく動作させることは本当に感謝しています。

CSVフィールドの名前(最初の反復)と各行の値(後続の反復)を読み取ったら、sprintfまたはvsprintfを使用して簡単に出力するHTML文字列を作成できます。例えば

$file = fopen('php://stdin', 'r'); // or open any other file you want 
$fields = array(); // this holds the name of the fields, read from the 1st row 

if ($file) { 
    while (($data = fgetcsv($file)) !== false) { 
     // If this is the first row, we assume it holds field names. 
     // So just remember what they are and loop to the next. 
     if(empty($fields)) { 
      $fields = $data; 
      continue; 
     } 

     // Subsequent rows are assumed to contain data. 
     // array_combine associates the data in the current row with the field 
     // names from the first row, allowing us to refer to them using those 
     // names and be independent of the order the fields appear in the input. 
     $row = array_combine($fields, $data); 

     // Format output conveniently with sprintf 
     $output = sprintf("%s is %d years old.\n", 
          $row['name'], 
          $row['age']); 
     echo $output; 
    } 
    fclose($file); 
} 

See it in action

+0

ありがとうございます - 動作しているようですが、私は1つの列を引き出して配列することができます - 最後のハードルを解決するのを手伝ってください上記の私の更新をご覧ください。 – Joshc

+0

@ user801773:あなた'sprintf'書式文字列が間違っています('% 'の後には何もありません)。 '%dはIDです、%sはクラスです、%sは名前です\ n"。書式文字列についての情報は 'sprintf' [documentation](http://www.php.net/manual/en/function.sprintf.php)を参照してください。 – Jon

+0

私はちょうどジョンに感謝したいと思います。美しい作品!!!!私は...これはGoogleの融合テーブルに接続することができますか? – Joshc

関連する問題