Как избежать предупреждения «Может вызвать устаревшее преобразование «false» в массив» при изменении значения массива, вPhp

Кемеровские программисты php общаются здесь
Ответить
Гость
 Как избежать предупреждения «Может вызвать устаревшее преобразование «false» в массив» при изменении значения массива, в

Сообщение Гость »


Я читаю файлы CSV с четырьмя столбцами, четвертый столбец — это строка, представляющая денежные значения в формате, подобном этому: $1000,23, -$21 000,24 и т. д.

Я хочу сохранить каждую строку в ассоциативном массиве с соответствующим заголовком, например (допустим, у меня есть CSV-файл с двумя строками):

Массив ( [0] => Массив ( [дата] => 04.01.2021 [контрольный_номер] => 7777 [описание] => Транзакция 1 [сумма] => $150,43 ) [1] => Массив ( [дата] => 05.01.2021 [контрольный_номер] => [описание] => Транзакция 2 [сумма] => $700,25 ) ) Дело в том, что я хочу сохранить строковое значение amount в виде числового значения (с плавающей запятой).

Так мне удалось сделать это с помощью этой функции

функция getTransactions(string $file_name): массив { если (!file_exists($file_name)) { триггер_ошибка('Файл "' . $file_name . '" не существует.', E_USER_ERROR); } $file = fopen($file_name, 'r'); $данные = []; fgetcsv($файл, 500); $headers = ['дата', 'check_number', 'описание', 'сумма']; while (($transaction = fgetcsv($file, 500)) !== false) { $transaction[3] = str_replace(["$", ','], "", $transaction[3]); $data[] = array_combine($headers, $transaction); } fclose($файл); вернуть $данные; } Это работает, но меня предупреждает о «ложном» преобразовании. Я думаю, это для функции fgetcsv(), поскольку она может вернуть значение «false», даже если цикл while этого не позволяет.

Итак... Как мне избежать этого предупреждения? Есть ли другой способ реализовать это?

Я пытался сначала сохранить каждую строку, затем изменить строку amount с помощью array_map(), но тогда я не могу изменить ключи значений строк функция getTransactions(string $file_name): массив { если (!file_exists($file_name)) { триггер_ошибка('Файл "' . $file_name . '" не существует.', E_USER_ERROR); } $file = fopen($file_name, 'r'); $данные = []; fgetcsv($файл, 500); $headers = ['дата', 'check_number', 'описание', 'сумма']; while (($transaction = fgetcsv($file, 500)) !== false) { $данные[] = $транзакция; } $data = array_map(fn($element) => [ $элемент[0], $элемент[1], $элемент[2], str_replace(["$", ','], "", $element[3]) ], $данные); // Я не могу понять, как изменить ключ с 0, 1, 2, 3 на «дата», «номер_проверки», «описание», «сумма» fclose($файл); вернуть $данные; } Массив ( [0] => Массив ( [0] => 04.01.2021 [1] => 7777 [2] => Транзакция 1 [3] => 150,43 ) [1] => Массив ( [0] => 05.01.2021 [1] => [2] => Транзакция 2 [3] => 700,25 ) ) Изменить CSV-файл:
Дата, проверка, описание, сумма 04.01.2021,7777,Транзакция 1,"$150,43" 05.01.2021,,Транзакция 2,"$700,25" 06.01.2021,,Транзакция 3,"-$1303,97"
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»