PHP 7.1.29 - число в строке ведет себя неправильно - PullRequest
0 голосов
/ 10 мая 2019

Я читаю CSV-файл с двумя столбцами (ID, DATE).Я хочу получить удостоверение личности и использовать его для чего-то, но то, что я получаю, действительно странно.Для первой строки я получаю «3», а после приведения к целому числу я получаю 0. Конечно, я напечатал значение, а длина «3» равна 4. WTF?Я только устал или что-то не так?Вторая строка работает как положено.

ФАЙЛ CSV:

3;2017-11-24 08:30:00+01
2;2017-10-20 09:00:00+02

КОД:

if (($handle = fopen(__DIR__ . "/myfile.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
        var_dump($data);
        var_dump($data[0]);
        var_dump(mb_strlen($data[0]));
        var_dump(gettype($data[0]));
        var_dump((int) $data[0]);
    }
    fclose($handle);
}

ВЫХОД:

array(2) {
  [0] =>
  string(4) "3"
  [1] =>
  string(22) "2017-11-24 08:30:00+01"
}
string(4) "3"
int(2)
string(6) "string"
int(0)
---------------------------
array(2) {
  [0] =>
  string(1) "2"
  [1] =>
  string(22) "2017-10-20 09:00:00+02"
}
string(1) "2"
int(1)
string(6) "string"
int(2)

РЕДАКТИРОВАТЬ:

Когда я меняю порядок строк, он всегда делает только первую строку.BOM?

1 Ответ

0 голосов
/ 10 мая 2019

Хорошо, проблема была в кодировании.После перехода с ISO-8859-1 на UTF-8 все работает нормально.Что еще странно, так это то, что PHP определяет ключ массива как «3» длиной 4 и после приведения к int возвращает 0.

...