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到数组中。
答案 0 :(得分:5)
因为$array
没有添加任何元素;您的某个条件(while
,if
)始终为false。
顺便说一下,你应该总是初始化非标量,但这不会解决你的问题。
答案 1 :(得分:1)
这是Ignacio said:while
或if
总是返回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;
}