параллельное присвоение в PHP - PullRequest
1 голос
/ 05 мая 2020

только что увидел новую функцию в PHP, называемую переменная распаковки , она выглядит как $arr = ["sth", "another thing", ...$another_array, "other"], и мне любопытно, что если я могу использовать оператор splat (или любой другой способ, результат имеет значение), как это

list($headers, ...$rows) = explode("\n", $csv_data);

, поэтому у меня будут две переменные: String $headers, содержащий мои заголовки csv, и Array $rows, в котором есть мои строки, как я могу этого добиться?

1 Ответ

0 голосов
/ 05 мая 2020

Оператор ... впервые введен в PHP 5.6 как аргумент распаковки оператор

В PHP 7.4, однако они вводят новое использование этого оператора и называют его оператор распространения , в котором массив с префиксом ... будет расширен местами во время определения массива.

Теперь, когда вы используете оператор splat ... таким образом

list($headers, ...$rows) = explode("\n", $csv_data);

Это означает, что вы хотите извлечь значения в массиве $rows для представления значений в вашем массиве $csv_data

Итак, если $rows содержит

$rows = ['row1', 'row2', 'row3'];

, это примерно эквивалентно

list($headers, $row1, $row2, $row3) = explode("\n", $csv_data);

Но это невозможно!

Неустранимая ошибка: оператор распространения не поддерживается в назначениях

Вам нужно str_getcsv для синтаксического анализа ваших данных CSV в массив

Использование

$csv = array_map('str_getcsv', file('file.csv')); 
...