2014-01-22 10 views
2

У меня возникла проблема с методом php fgetcsv(). Я могу получить значение «1» вместо массива для каждой строки. Вот код:fgetcsv() возвращает «true» для каждой строки

$row = 0; 
$teststring=''; 
$handle = fopen($savepath,'r'); 
if($handle!==FALSE){ 
    while(($data = fgetcsv($handle,2000,'|')!==FALSE)){  //I am using '|' as the delimiter 
     echo (string)$data; 
     if($row!=0){ 
      foreach($data as $d){ 
       array_push($result['added'],$d); 
      } 
     } 
     $row++; 
    } 
    fclose($handle); 
} 

Я протестировал 3-строчный CSV-файл, и результат будет «111». Конечно, в массиве $ result ['added'] нет значения. Может ли любое тело узнать, что происходит? Спасибо.

+0

Бьюсь об заклад, что '! ==' оценивает сначала, а результат переходит в '$ data' ... – Charles

+0

Эй, вы правы! Неплохо подмечено. Большое спасибо! – CharlesDou

ответ

5

Порядок действий!

while(($data = fgetcsv($handle,2000,'|')!==FALSE)){ 

PHP интерпретирует эту строку как:

  • Зов fgetcsv
  • Без литья, сравнить его булевой false
  • Присвоить результат этого сравнения с $data

Это не то, что вы хотите. Ваши круглые скобки неуместны, вы хотите, последний один до сравнения:

while(($data = fgetcsv($handle,2000,'|')) !== FALSE){ 

я добавил дополнительные пробела, чтобы сделать изменения более очевидными.