Необходимо извлечь данные из файла и сформировать ассоциативный массив — PHP task. Конкретная задача со stackoverflow:
1) Парсится какой-то книжный интернет магазин, в результате образуется текстовый файл (одна строка — одна книга). Поля в строке разделены между собой двумя и более пробелами.
The Boys in the Boat Daniel James Brown 067002581X 19.99 5 16.99 9 16.99 Harry Potter and the Cursed Child J. K. Rowling, Jack Thorne, John Tiffany 1338099133 18.95 25 17.98 0 17.98 Just Mercy Bryan Stevenson 0812994520 17.50 8 16.25 10 16.25 Me Before You Jojo Moyes 0670026603 18.95 2 17.50 1 17.25 A Thousand Splendid Suns Khaled Hosseini 1594489505 19.00 7 15.50 4 14.95 The Wright Brothers David McCullough 1476728742 21.95 3 18.95 3 18.95
2) Необходимо в результате обработки файла получить ассоциативный массив определенной структуры.
# code ...
// на выходе должно быть
$books = array(
"The Boys in the Boat" => array (
"author" => 'Daniel James Brown',
"isbn" => '067002581X',
"hardcover" => 19.99,
"quantity" => 5,
"softcover" => 5.99,
"quantity" => 9,
"e-book" => 6.99,
),
"Jungle" => array (
"author" => 'Upton Sinclair',
"isbn" => '067002581',
"hardcover" => 19.99,
"quantity" => 5,
"softcover" => 5.99,
"quantity" => 7,
"e-book" => 6.99,
),
); Решение задачи:
- Создать массив с ключами(автор, номер по каталогу, жесткая обложка …)
- С помощью стандартной функции file построчно прочитать файл в массив
- Регулярным выражением разделить каждый элемент полученного массива и положить во временный массив. Деление по двум и более пробелам.
- Первый элемент полученного массива — это название книги, он является ключом результирующего массива book
- Остальные элементы функцией array_combine «склеиваем» с массивом ключей
- Построчно формируем результирующий массив
# code ...
$keyarray = ["author", "isbn", "hardcover", "quantity", "softcover", "quantity", "e-book"];// temp array names keys
$array = file('text.txt');// нужно прочитать построчно
foreach ($array as $key => $value) {
$temparray = preg_split( '/ {2,}/', $value);// разделить строку по двум и более пробелам / {2,}/g
$namebook = array_shift($temparray); // извлекаем название книги и укорачиваем массив на один элемент
$books[$namebook] = array_combine($keyarray, $temparray); // склеиваем массив с ключами и новый массив
} Я уже 3 года торгую фьючерсами на Bybit и приглашаю тебя присоединиться и получить до $30 000 бонусами плюс скидки на комиссии:
Зарегистрироваться на Bybit
Чем больше депозит – тем больше бонусов. Также моим рефералам доступны торговые боты для трейдинга по самым выгодным тарифам. 

