PHP如何使用file()为空的.csv文件返回false?

时间:2015-02-27 03:34:23

标签: php file csv fgetcsv

为什么我总是为一个空的.csv文件获取一个空字符串项的数组?

$content = file('products.csv');

print_r($content);

结果:

Array ( [0] => )

我可以返回false,以便我知道csv文件中没有任何内容吗?

3 个答案:

答案 0 :(得分:4)

这似乎是特别符合您口味的特殊行为(根本没有问题)。这意味着,您应该为此创建一个包装函数。

function contentIsNotEmpty($content) {
   $isEmpty = empty($content) || (count($content) == 1 && empty($content[0]));
   return $isEmpty ? false : $content;
}
编辑:@scrowler的反馈和Michael J. Mulligan的反馈。

答案 1 :(得分:2)

单行测试应该可以得到结果:

$empty = empty($content) || (count($content) === 1 && empty($content[0]));

以下内容应避免"假空":

$empty = empty($content) || (count($content) === 1 && $content[0] === '');

如果你需要一个可重复使用的功能,并且如你所说,更喜欢获得一个阵列或什么都没有,这可能会有所帮助:

function get_file($file_name = null, $strict = false) {
    $return = null;
    if(!empty($file_name) && is_readable($file_name)) {
        $contents = file($file_name);
        if(
            !empty($contents)
            && (
                count($contents) > 1 
                || (
                    !empty($contents[0])
                    || ($strict && $contents[0] !== '')
                )
            )
        ) {
            $return = $contents;
        }
    }
    return $return;
}

我的意思是,我们可以获得各种创意和迭代等等。但我认为你明白了。

如果你想获得一个CSV文件,我建议使用像fgetcsv()这样的方法(改变用途):

function getcsv($file_name, $headers = array(), $delimiter = ',', $enclosure = '"', $escape = "\\" ) {
    $contents = array();
    $get_headers = $headers === FALSE;
    $headers = is_array($headers) ? array_values($headers) : array();
    if(!empty($file_name) && is_readable($file_name)) {
        $row = 0;
        if (($handle = fopen($file_name, "r")) !== FALSE) {
            while (($data = fgetcsv($handle, 0, $delimiter, $enclosure, $escape)) !== FALSE) {
                if($get_headers && empty($headers)) {
                    $headers = $data;
                    continue;
                }
                foreach($data as $i => $col_value) {
                    $col_name = isset($headers[$i]) ? $headers[$i] : $i;
                    $contents[$row][$col_name] = $col_value;
                }
                $row++;
            }
            fclose($handle);
        }
    }

    return $contents;
}

注意,上面没有经过测试,只是快速选秀,我要去睡觉了。如果需要,我明天会编辑它。

最后,如果你得到一个带有空格的单行,并且这被验证为"空"在你的眼中,在修剪后进行简单的测试:

$empty_line = trim($content[$line_num]) == '';

不确定还告诉你什么。我认为我们为您提供了相当多的工具和方法来验证这种情况。祝你好运。

答案 2 :(得分:1)

试试这个

$content = file('products.csv');
         if(!empty($content)){
          print_r();}{
        else{
           // Do something if no content
        }