PHP:如果没有正确选择


PHP: If not selecting correctly

我正在构建一个基于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>";
        }
    }
}
相关文章: