コードごとに行ごとに何が起こっているのかを実際に伝えるのは難しいので、達成しようとしていることを文書化する方法の各ステップをコメントする方がよいでしょう。後で自分のコードを見ようとすると、ほとんどの場合これは役に立ちます。
イテレータを構築した方法に基づいて、リーグを抽出する直接的な方法は実際には分かりませんでした。それはあなたがリストを反復処理するときに、以前に割り当てられた最後の値だから$line[0]
は常に「国家」であることの理由は次のとおりです。
foreach($csv_array as $key => $value) {
if ($key == 0) {
continue;
}
$line = explode(',', $value);
私はそれが少ない再設計で可能だと確信していますが、私が言ったように、Iコードの各行が何を意図しているのかが少し不明でした。
お知らせ:不定オフセット:1余談として
if (array_key_exists($line[1], $tables)) {
$tables[$line[1]][] = $line;
} else {
$tables[$line[1]] = [$line];
}
で、これはおそらくだろうあなたは上のエラー報告があった場合は特に、あなたはの多くは気づいているだろうリレーショナルデータベースからCSV出力を生成することをより制御できれば、GROUP BY句を使用して特定のニーズに合わせてより良い出力を得ることができます。
これを解決するために、私は最初にすべてのCSV値を解析された配列に読み込むことで完全な再設計を選択しました。
<?php
// no need for extra \n's when inside quoted string
$csv = "League,Team,Date,Opponent,Result
american,MIN,May 3,UTA,W
american,MIN,May 4,SEA,L
american,SAC,May 3,DAL,L
american,SAC,May 4,TOR,W
national,NYN,May 5,BAL,L
national,NYN,May 7,MIA,W
national,DET,May 6,DEN,L
national,DET,May 7,POR,L";
$csv_array = explode("\n", $csv);
$headers = explode(",", $csv_array[0]);
// iterate through all lines of CSV, skipping first header line
for($i=1;$i<count($csv_array);$i++) {
$line = explode(",", $csv_array[$i]);
// iterate through all headers and assign corresponding line value
foreach ($headers as $index => $header){
$parsed_array[$i][$header] = $line[$index];
}
}
これはあなたにこのようになります整頓連想配列を与える:
Array
(
[1] => Array
(
[League] => american
[Team] => MIN
[Date] => May 3
[Opponent] => UTA
[Result] => W
)
[2] => Array
(
[League] => american
[Team] => MIN
[Date] => May 4
[Opponent] => SEA
[Result] => L
)
[3] => Array
(
[League] => american
[Team] => SAC
[Date] => May 3
[Opponent] => DAL
[Result] => L
)
[4] => Array
(
[League] => american
[Team] => SAC
[Date] => May 4
[Opponent] => TOR
[Result] => W
)
[5] => Array
(
[League] => national
[Team] => NYN
[Date] => May 5
[Opponent] => BAL
[Result] => L
)
[6] => Array
(
[League] => national
[Team] => NYN
[Date] => May 7
[Opponent] => MIA
[Result] => W
)
[7] => Array
(
[League] => national
[Team] => DET
[Date] => May 6
[Opponent] => DEN
[Result] => L
)
[8] => Array
(
[League] => national
[Team] => DET
[Date] => May 7
[Opponent] => POR
[Result] => L
)
)
は、今では、このデータからカスタムdivタグやテーブルを生成するかなり簡単なプロセスです:
// create divs and tables
foreach ($parsed_array as $i => $game) {
// since we're interested in pairs, then create new div every other one
// if odd, then open div/table
if ($i % 2 !== 0){
echo "
<div class='$game[League]'>
<table>
<tr>
<th>$game[Team]</th>
</tr>
<tr>
<th>Date</th><th>Opponent</th><th>Result</th>
</tr>
";
}
// print data
echo "
<tr><td>$game[Date]</td><td>$game[Opponent]</td><td>$game[Result]</td></tr>
";
// if even, then close div/table
if ($i % 2 === 0){
echo "
</table>
</div>
";
}
}
これはあなたの質問にdivクラスの名前として正しいリーグを提供するようにHTMLを生成します:
明確な答え、ジェフのためのの
<div class='american'>
<table>
<tr>
<th>MIN</th>
</tr>
<tr>
<th>Date</th><th>Opponent</th><th>Result</th>
</tr>
<tr><td>May 3</td><td>UTA</td><td>W</td></tr>
<tr><td>May 4</td><td>SEA</td><td>L</td></tr>
</table>
</div>
<div class='american'>
<table>
<tr>
<th>SAC</th>
</tr>
<tr>
<th>Date</th><th>Opponent</th><th>Result</th>
</tr>
<tr><td>May 3</td><td>DAL</td><td>L</td></tr>
<tr><td>May 4</td><td>TOR</td><td>W</td></tr>
</table>
</div>
<div class='national'>
<table>
<tr>
<th>NYN</th>
</tr>
<tr>
<th>Date</th><th>Opponent</th><th>Result</th>
</tr>
<tr><td>May 5</td><td>BAL</td><td>L</td></tr>
<tr><td>May 7</td><td>MIA</td><td>W</td></tr>
</table>
</div>
<div class='national'>
<table>
<tr>
<th>DET</th>
</tr>
<tr>
<th>Date</th><th>Opponent</th><th>Result</th>
</tr>
<tr><td>May 6</td><td>DEN</td><td>L</td></tr>
<tr><td>May 7</td><td>POR</td><td>L</td></tr>
</table>
</div>
感謝。私のデータは実際には '$ csv = file_get_contents(assets/schedules.csv ');'これらのエラーは、ダミーデータを入れたときにのみ発生します。申し訳ありません。しかし、そのarray_key_existsコードはテーブルをそれぞれのチームに分割していました。これはデータが変更されるので必要です。ラインのペアではなく、探しているはずのユニークなチーム名です。また、最後の列(結果)に各値の後にコンマを入れて、データを表示し、データを印刷している行の未定義のインデックスエラーを防ぐ必要がありました。どんな考え? – Beau
@Beauあなたは「各値の後にコンマを入れなければならない」と言ったが、改行 '\ n'を意味するのだろうか? –
@Beau投稿された質問であなたが話しているコンマは本当に表示されないので、私は盲目だと思います...あなたはデータ 'アメリカン、MIN、5月3日、UTA、W \ n'またはコードのどこかで話していますか? –