PHP организует массив в детали продукта - PullRequest
0 голосов
/ 22 января 2019

Здравствуйте, все, что мне нужно немного помочь с проблемой массива.

У меня есть плоский массив, созданный из текста PDF, массив данных продукта, смешанный с другим текстом страницы, кажется, что шаблон

ОписаниеCodePrice

затем X количество продуктов с

  • Descripton
  • ID продукта
  • Цена

данные также не совпадают, некоторые продукты имеют более 3 строк

продукт будет

  • Описание: сковорода высокого / низкого уровня Hemsworth 400 (ч) х 375 (ш) х438 (d) мм
  • Идентификатор процесса: INST02009
  • Цена: £ 176,00

Я использовал это для аналогичного проекта, но он не совсем работает

$transactions = array();
foreach ($array as $row) {
    if ($row['0'] === "DescriptionCodePrice") {
        $transactions[] = array();
     }
     $transactions[count($transactions) - 1][0] = $row;
 }

Я пытаюсь извлечь все данные о продукте в аккуратный массив, например так:

  Array
(
    [products] => Array
        (
            [0] => Array
                (
                    [description] => 
                    [id] => 
                    [price] => 
                 )

            [1] => Array
                (
                    [description] => 
                    [id] => 
                    [price] => 
                )

            [2] => Array
                (
                    [description] => 
                    [id] => 
                    [price] => 
                )

         )

 )

это мои данные

Array
(
    [0] => 8        SANITARYWARE  |  HEMSWORTH CLOSE COUPLEDPrices include VAT  
    [1] => DescriptionCodePrice
    [2] => Hemsworth Close Coupled Pan 
    [3] => 421(h) x 373(w) x 673(d) mm INST02007
    [4] => £206.00 
    [5] => Hemsworth Close Coupled 
    [6] => Cistern 481(w) mm INST02001
    [7] => £170.00 
    [8] => Hemsworth Basin 605mm  
    [9] => Two Taphole INST02003
    [10] => £172.00
    [11] => Hemsworth Pedestal INST02008£84.00
    [12] => Hemsworth Soft Close Bar 
    [13] => Hinge Seat - Solid Natural Oak INST02011
    [14] => £147.00
    [15] => Total £779.00   
    [16] => Hemsworth Close Coupled WC Suite
    [17] => Description CodePrice
    [18] => Hemsworth Close Coupled Pan 
    [19] => 421(h) x 373(w) x 673(d) mm INST02007
    [20] => £206.00
    [21] => Hemsworth Close Coupled 
    [22] => Cistern 481(w) mm INST02001
    [23] => £170.00
    [24] => Hemsworth Soft Close Bar 
    [25] => Hinge Seat - Solid Natural Oak INST02011
    [26] => £147.00
    [27] => Hemsworth Soft Close Bar 
    [28] => Hinge Seat - White INST02012
    [29] => £132.00 
    [30] => Hemsworth   
    [31] => Hemsworth Basin 605mm
    [32] => Description CodePrice
    [33] => Hemsworth Basin 605mm  
    [34] => Two Taphole INST02003
    [35] => £172.00
    [36] => Hemsworth Basin 605mm  
    [37] => One Taphole INST02010
    [38] => £172.00
    [39] => Hemsworth Cloakroom Basin 
    [40] => 500 x 305mm Two Taphole  INST02013
    [41] => £144.00
    [42] => Hemsworth Pedestal (Fits 
    [43] => 605mm and 500mm basin) INST02008
    [44] => £84.00  
    [45] => £256.   00  
    [46] => Hemsworth Basin 
    [47] => 605mm Two Taphole   
    [48] => & Pedestal   
    [49] => (Taps not included) 
    [50] => £523.   00  
    [51] => Hemsworth Close  Coupled WC with  Oak Seat  
    [52] => Hemsworth Suite with Close  
    [53] => Coupled Cistern WC & Basin  
  )

Код моей текущей страницы

<code>require_once("vendor/autoload.php"); 

// Parse pdf file and build necessary objects.
$parser = new \Smalot\PdfParser\Parser();
$pdf    = $parser->parseFile('Instinct-Autumn-Bathroom-Catalogue-2018- 
pages/page-9.pdf');

// Retrieve all pages from the pdf file.
$pages  = $pdf->getPages();

// Loop over each page to extract text.
foreach ($pages as $page) {
    $array = explode("\n", $page->getText());
    echo "<pre>";
    print_r($array);
    echo "
"; echo '

';} // Разбить массив на транзакции $ Transactions = array (); foreach ($ array as $ row) {if ($row ['0'] === "DescriptionCodePrice") {$ Transactions [] = array ();} $ Transactions [количество ($ транзакций) - 1] [0] = $ row;}

1 Ответ

0 голосов
/ 22 января 2019

Это один из способов сделать это:

Сначала удалите заголовки. (Похоже, у вас на самом деле есть два заголовка, которые вам не нужны, а не просто «DescriptionCodePrice».)

array_splice($data, 0, 2);

Разделите оставшиеся данные на три части и объедините каждый кусок с клавишами строк, чтобы получить результат.

$keys = ['title', 'description', 'price'];

$result['products'] = array_map(function ($item) use ($keys) {
    return array_combine($keys, $item);
}, array_chunk($data, 3));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...