我无法让这个工作正常,我需要程序列出文件中的记录,如果$ records [$ row] [2]与前一个相同,它应该用'a'重复类'field'新的$记录[$ row] [2],否则它应该开始一个新的#row。请帮忙!
if (($handle = fopen('upload/ATLANTA.csv', "r")) !== FALSE) {
$prevRow2 = '';
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$records[] = $data;
echo 'Previous'. $prevRow2;
echo "<div id=\"row\"><div id=\"num\">" .$row. "</div>";
if ($records[$row][2] == $prevRow2) {
for ($c=0; $c < $num; $c++) {
if ($c != 1) {
echo "<div class=\"field\">" . $data[$c] . "</div>";
}
}
$prevRow2 = $records[$row][2];
$row++;
}
else {
echo "<div id=\"row\"><div id=\"num\">" .$row. "</div>";
for ($c=0; $c < $num; $c++) {
if ($c != 1) {
echo "<div class=\"field\">" . $data[$c] . "</div>";
}
}
$prevRow2 = $records[$row][2];
$row++;
echo "</div>";
}
echo "</div>";
}
fclose($handle);
}
答案 0 :(得分:0)
首先,您似乎假设您的CSV文件按要分组的列排序。如果不是这种情况,那么您应首先读取文件,对其进行排序,然后进行打印。如果您的CSV文件对于服务器的内存来说不是太大,那么这应该可行。
此外,您的代码有重复并将整个文件存储到一个数组中(实际上,就像我上面建议的那样,但我不知道它是否是故意的)。尝试这样的事情:
这是我的demo.csv:
"Banana", "yellow"
"Lemon", "yellow"
"Orange", "orange"
"Strawberry", "red"
"Tomato", "red"
这是PHP循环遍历它并按颜色列出:
<?php
if (($handle = fopen('demo.csv', "r"))) {
$prev = false;
while (($data = fgetcsv($handle, 1000, ","))) {
if ($prev !== $data[1]) {
$prev = $data[1];
echo '<p><b>' . $prev . '</b></p>';
}
echo $data[0] . '<br>';
}
}
fclose($handle);
?>
这是HTML中的输出(我在这里添加了一些换行符以便正确显示)
<p><b>yellow</b></p>
Banana<br>
Lemon<br>
<p><b>orange</b></p>
Orange<br>
<p><b>red</b></p>
Strawberry<br>
Tomato<br>
(如果CSV没有按颜色分组,则需要采用不同的方法。)