我正在构建一个基于CSV文件的列表。以下是CSV文件中最常见的两行:
10,11,12,13,14,15,16
12,13,14,15,16,0,0
文件逐行读取并存储到列表中。下面是代码:
while(($current_line = fgets($find_products, 4096)) !== false) {
list($weight1, $weight2, $weight3, $weight4, $weight5, $weight6, $weight7) = explode(",", $current_line);
}
查看列表中每一项的值,如果值不为0,则打印出来。下面是代码:
if($weight1 != '0') {
print '<option>'.$weight1.' lb.</option>';
}
if($weight2 != '0') {
print '<option>'.$weight2.' lb.</option>';
}
if($weight3 != '0') {
print '<option>'.$weight3.' lb.</option>';
}
if($weight4 != '0') {
print '<option>'.$weight4.' lb.</option>';
}
if($weight5 != '0') {
print '<option>'.$weight5.' lb.</option>';
}
if($weight6 != '0') {
print '<option>'.$weight6.' lb.</option>';
}
if($weight7 != '0') {
print '<option>'.$weight7.' lb.</option>';
}
下面是在CSV文件上运行上述两行代码后的结果:10 lb.
11 lb.
12 lb.
13 lb.
14 lb.
15 lb.
16 lb.
和
12 lb.
13 lb.
14 lb.
15 lb.
16 lb.
0 lb.
0磅不应该根据$weight6和$weight7的值显示。我打印了这两个变量的值,它们显示为0。我也可以通过测试确认$weight7的if语句是罪魁祸首,但我不知道是什么导致了这个问题。任何帮助将非常感激!
原因是fgets()
返回以换行符结尾的行。所以$weight7
是"0'r'n"
(这就是为什么var_dump
说长度是3)而不是"'0"
。你应该在分割线条之前修剪线条,以消除这些。
while(($current_line = fgets($find_products, 4096)) !== false) {
$current_line = trim($current_line);
list($weight1, $weight2, $weight3, $weight4, $weight5, $weight6, $weight7) = explode(",", $current_line);
}
或者您可以使用fgetcsv()
而不是fgets()
。它会自动修剪行并在分隔符处分隔行,返回一个可以遍历的数组。
while ($weights = fgetcsv($find_products)) {
foreach ($weights as $w) {
if ($w != '0') {
echo "<option>$w lb.</option>";
}
}
}