为什么我的函数返回NULL?

时间:2011-10-15 01:00:58

标签: php

function csv_data_to_zip_array($csv)
{
    $f = fopen($csv, "r");
    $i= 0;
    while($line= fgets($f)){
        $line = preg_replace("/[^0-9]/", "", $line);
        if(is_numeric($line)&&strlen($line)==5){ // it is a zip code
            $array[] = $line;
        }
        $i++;
    }
    fclose($f);
    return $array;
}

这是我的功能,它正在读取带有一堆邮政编码的大型csv到数组中。

2 个答案:

答案 0 :(得分:5)

因为$array没有添加任何元素;您的某个条件(whileif)始终为false。

顺便说一下,你应该总是初始化非标量,但这不会解决你的问题。

答案 1 :(得分:1)

这是Ignacio saidwhileif总是返回false,并且你应该在那个while循环之前将$array初始化为空数组。

以下建议可能更快地获得结果:如果CSV始终在同一列中包含邮政编码,请改用fgetcsv。然后,您只需指定要检查的列号(is_numeric(substr($line[column_num],0,5))),而不是在整行上运行preg_replace

修改

使用您从网站发布的样本数据(我注意到其中的所有数据文件在第一列中都有邮政编码;有些文件有标题行,有些则没有),这个功能可以解决问题:

function csv_data_to_zip_array($csv_path) {
  $fd = fopen($csv_path,'r');
  $zipcodes = array();
  while ($columns = fgetcsv($fd)) {
    if(is_numeric($columns[0])) {
      $zipcodes[] = $columns[0];
    }
  }
  return $zipcodes;
}