Дополнительное место в первом значении CSV при чтении с PHP - PullRequest
0 голосов
/ 13 сентября 2018
<?php
ini_set('auto_detect_line_endings', TRUE);
$csv = array_map('str_getcsv', file('Testcsv.csv'));
print_r($csv);

Этот код анализирует файл Testcsv.csv, который выглядит следующим образом ..

4,5,6,7,8
9,10,11,12,13
0,1,3,2,15

Однако последний оператор печати возвращает

Array
(
    [0] => Array
        (
            [0] =>  4
            [1] => 5
            [2] => 6
            [3] => 7
            [4] => 8
        )

    [1] => Array
        (
            [0] => 9
            [1] => 10
            [2] => 11
            [3] => 12
            [4] => 13
        )

    [2] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 3
            [3] => 2
            [4] => 15
        )

)

vardump ($ csv) производит

array(3) {
    [0]=>
  array(5) {
        [0]=>
    string(4) " 4"
        [1]=>
    string(1) "5"
        [2]=>
    string(1) "6"
        [3]=>
    string(1) "7"
        [4]=>
    string(1) "8"
  }
  [1]=>
  array(5) {
        [0]=>
    string(1) "9"
        [1]=>
    string(2) "10"
        [2]=>
    string(2) "11"
        [3]=>
    string(2) "12"
        [4]=>
    string(2) "13"
  }
  [2]=>
  array(5) {
        [0]=>
    string(1) "0"
        [1]=>
    string(1) "1"
        [2]=>
    string(1) "3"
        [3]=>
    string(1) "2"
        [4]=>
    string(2) "15"
  }
}    

Независимо от того, что я делаю или как я форматирую CSV, первое значение всегда получает пустой пробел перед ним.В данном случае «4» вместо «4».Я не могу понять почему.Я нахожусь на компьютере Mac, и без первой строки кода все становится по-настоящему шатким, так как он не обнаруживает разрывы строк.Я создал и сохранил .csv в Excel.Любое понимание помогает, спасибо.

1 Ответ

0 голосов
/ 13 сентября 2018

Я предполагаю, что ваш файл на самом деле имеет этот символ или скрытый символ перед ним.

Чтобы узнать, что это, откройте свой терминал.Если файл называется 'foo.csv', используйте:

hexdump -C foo.csv

Это даст вам hexdump вашего файла.Я почти уверен, что вы найдете скрытый символ перед первым 4.

edit спасибо за публикацию hexdump.Ваш файл содержит спецификацию UTF-8.Либо убедитесь, что то, что создает файл, не выводит спецификацию UTF-8, либо очистите файл перед его открытием.

Запись спецификации UTF-8 в большинстве случаев больше не выполняется современным программным обеспечением.Я не думаю, что это больше рекомендуется, но некоторые программы все еще могут это делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...