Php - чтение строк файла в массив - PullRequest
0 голосов
/ 24 сентября 2019

Числа в моем файле 5X5:

13456
23789
14789
09678
45678

Я пытаюсь поместить это в эту форму

array[0]{13456}
array[1]{23789}
array[2]{14789}
array[3]{09678}
array[4]{45678}

Мой код:

$fileName = $_FILES['file']['tmp_name'];
  //Throw an error message if the file could not be open
  $file = fopen($fileName,"r") or exit("Unable to open file!");

  while ($line = fgets($file)) {
      $digits .= trim($line);
     $members = explode("\n", str_replace(array("\r\n","\n\r","\r"),"\n",$digits));
      echo $members;

Вывод, который я получаю, таков:

ArrayArrayArrayArrayArray

Ответы [ 3 ]

0 голосов
/ 24 сентября 2019

Вы можете просто поместить строки в массив и использовать print_r вместо echo для печати этого массива

while ($line = fgets($file)) {
  $members[] = $line;
}
print_r($members);
0 голосов
/ 24 сентября 2019

Это должно зависеть от файла, с которым вы имеете дело.

FileType:

  • text -> fgets ($ file)
  • CSV -> fgetcsv($ file)
0 голосов
/ 24 сентября 2019

fgets получает строку из указателя файла, поэтому теоретически в $line не должно быть символов "\r" или "\n".explode все равно будет работать, даже если разделитель не найден.Вы просто получите массив с одним элементом, всей строкой.Вы не можете повторить массив, хотя.(Вот почему вы видите Array для каждой строки; это лучшее, что PHP может сделать, когда вы используете echo в массиве.)

На вашем месте я бы предпочел просто использовать file()вместо этого.

$members = array_map('trim', file($fileName, FILE_IGNORE_NEW_LINES));

С файлом примера, который вы показали, это должно привести к

$members = ['13456', '23789', '14789', '09678', '45678'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...