PHP ассоциативный массив и файлы

Необходимо извлечь данные из файла и сформировать ассоциативный массив — 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,
        ),
     );

Решение задачи:

  1. Создать массив с ключами(автор, номер по каталогу, жесткая обложка …)
  2. С помощью стандартной функции file построчно прочитать файл в массив
  3. Регулярным выражением разделить каждый элемент полученного массива и положить во временный массив. Деление по двум и более пробелам.
  4. Первый элемент полученного массива — это название книги, он является ключом результирующего массива book
  5. Остальные элементы функцией array_combine «склеиваем» с массивом ключей
  6. Построчно формируем результирующий массив
# 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); // склеиваем массив с ключами и новый массив
}

Рейтинг
( Пока оценок нет )
Загрузка ...