За последние 24 часа нас посетил 18431 программист и 1606 роботов. Сейчас ищет 941 программист ...

Не корректно работает функция fgetcsv()

Тема в разделе "Прочие вопросы по PHP", создана пользователем mtimur, 5 авг 2014.

  1. mtimur

    mtimur Новичок

    С нами с:
    26 июн 2014
    Сообщения:
    3
    Симпатии:
    0
    Доброе утро уважаемые программисты.

    Делаю чтение данных из CSV файла
    Пример кода:
    Код (Text):
    1.  
    2.                $files = glob('folder1/*.csv');
    3.         $files1 = glob('folder2/*.csv');
    4.         $files2 = glob('folder3/*.csv');
    5.         $files3 = glob('folder4/*.csv');
    6.        
    7.         $myarray = array($files, $files1, $files2,$files3);
    8.        
    9.         for($check = 0; $check < count($myarray); $check++)
    10.         {
    11.             if(count($myarray[$check])>0)
    12.             {
    13.                 for($i = 0; $i < count($myarray[$check]); $i++) {
    14.            
    15.                     $file = $myarray[$check][$i];
    16.  
    17.                     // open and read ther file
    18.                     if(($file_handle = fopen($file, "r"))) {
    19.  
    20.                         $arrays = array();
    21.                         while (!feof($file_handle) ) {
    22.                           $line_of_text = customfgetcsv($file_handle, 1024);
    23.                           $arrays[] = $line_of_text;
    24.                         }
    25.  
    26.                         $newArrays = array();
    27.                         foreach($arrays as $id => $row)
    28.                         {
    29.                           if($row[1] > 0){
    30.                              $newArrays[] = $row;
    31.                    
    32.                           }
    33.                         }
    34.                        
    35.                         for($r = 0; $r < count($newArrays); $r++) {
    36.                        
    37.                             $myarrayList = $newArrays[$r];
    38.                            
    39.                             echo "<pre>";
    40.                             print_r($myarrayList);
    41.                             echo "</pre>";
    42.                            
    43.                         }
    44.                        
    45.                         fclose($file_handle);
    46.                     }
    47.                 }
    48.             }
    49.         }
    50.        
    51.  
    52.                  function customfgetcsv(&$handle, $length, $separator = ';'){
    53.              $buffer = fgetcsv($handle, $length);
    54.              return $buffer = fgetcsv($handle, $length);
    55.          }
    Результат у меня такой:


    • Array
      (
      [0] => 1262624
      [1] => 043082
      [2] => B
      [3] => 5
      [4] =>
      [5] =>
      [6] =>
      [7] => 5.09.1989
      [8] => 3899154 ШКД Н СУГД 5.09.2006
      [9] => 2700
      [10] =>
      [11] =>
      )
      Array
      (
      [0] => 1262626
      [1] => 037492
      [2] => C
      [3] => 13
      [4] =>
      [5] =>
      [6] =>
      [7] => 12.09.1990
      [8] => 4801962 ШКД Н РУДАКИ 20.11.2007
      [9] =>
      [10] =>
      [11] =>
      )
      Array
      (
      [0] => 1262627
      [1] => 03747
      [2] => C
      [3] => 13
      [4] =>
      [5] =>
      [6] =>
      [7] => 15.02.1994
      [8] => 6258046 ШКД Н ФАЙЗОБОД 5.11.2010
      [9] =>
      [10] =>
      [11] =>
      )

    Проблема в том что в ячейке массива 4,9,10,11 есть строка, то-есть а-я не показывает данные, а когда в файле csv в перед этой ячейки вставляю какую-нибудь букву он берет в массив...

    В чем может быть проблема, очень прошу Вашего совета....
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    в кодировке файла

    если ячейка начинается не с "uft-8 символа" происходит такой вот косяк