2011-10-15 4 views
0
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 с кучей почтовых индексов в массив.Почему моя функция возвращает NULL?

ответ

1

Это то, что Ignacio said: либо while или if всегда возвращается ложь, и вы должны инициализировать $array как пустой массив до этого в то время как петли в любом случае.

Вот предложение, возможно, получить результаты быстрее: если CSV всегда содержит почтовые индексы в том же столбце, вместо этого используйте fgetcsv. Затем вы можете просто указать номер столбца для проверки (is_numeric(substr($line[column_num],0,5))) вместо того, чтобы запускать preg_replace на всей строке.

Edit:

Используя данные примера вы размещены с вашего сайта (я заметил, все файлы данных там имеют почтовый индекс в первом столбце, некоторые файлы имеют строку заголовка, а некоторые нет), это функция делает трюк:

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; 
} 
+0

это не совсем в формате csv, там просто текстовые документы переименованы в csv, потому что они их отправляют. idky – theprestig3

+0

Также, если я эхо-строка $, почтовый индекс печатается. – theprestig3

+0

@ theprestig3, можете ли вы подтвердить, что вы теперь инициализируете '$ array' как пустой массив перед циклом' while'? – imm

5

Поскольку элементы никогда не добавляются к $array; одно из ваших условий (while, if) всегда неверно.

Как в стороне, вы всегда должны инициализировать не скаляры, но это не решит вашу проблему здесь.

+0

Спасибо, я сделал тест и полностью удалил оператор if, и массив все еще NULL. Может ли это иметь какое-то отношение к fgets? – theprestig3

Смежные вопросы