Сопоставить сгенерированные данные подмассива с шаблоном html для каждого верхнего уровня в массиве - PullRequest
0 голосов
/ 19 марта 2020

Благодаря превосходной помощи сообщества SO у меня теперь есть автоматически сгенерированный массив, который выглядит так ... (выглядит как реальные данные, но был анонимным)

Array
(
    [0] => Array
        (
            [0] => 15304
            [1] => 15-04478-27247
            [2] => mysuserid
            [3] => eric smith
            [4] => ericsfakeemail@gmail.com
            [5] => 
            [6] => 27 Any Close
            [7] => 
            [8] => Manchester
            [9] => Greater Manchester
            [10] => M14 2RB
            [11] => United Kingdom
            [12] => eric spilsbury
            [13] => +44 7719 123456
            [14] => 27 Any Close
            [15] => 
            [16] => Manchester
            [17] => Greater Manchester
            [18] => M14 2RB
            [19] => United Kingdom
            [20] => Array
                (
                    [0] => 302804801330
                    [1] => 302804815489
                )

            [21] => Array
                (
                    [0] => CAUTION DRIVEN BY A BIKER  - Fun Vinyl Decal Sticker 4x4/Car/Lorry/Van/Camper
                    [1] => Warning Biker With an Attitude Annoy At Your Own Risk Car Vinyl Decal Sticker
                )

            [22] => 
            [23] => No
            [24] => Array
                (
                    [0] => 2
                    [1] => 1
                )

            [25] => Array
                (
                    [0] => £3.90
                    [1] => £1.95
                )

            [26] => £0.00
            [27] => 
            [28] => £0.00
            [29] => £0.00
            [30] => £3.90
            [31] => No
            [32] => PayPal
            [33] => 30-Jan-20
            [34] => 30-Jan-20
            [35] => 
            [36] => 
            [37] => 
            [38] => 31-Jan-20
            [39] => No
            [40] => 
            [41] => 
            [42] => 5LD87965090833954U
            [43] => Royal Mail 1st Class
            [44] => 
            [45] => Array
                (
                    [0] => 1711351782020
                    [1] => 1711351781020
                )

            [46] => 
            [47] => No
            [48] => 
            [49] => No
            [50] => 
            [51] => No
        )

    [1] => Array
        (
            [0] => 15121
            [1] => 25-04445-36722
            [2] => dopp69
            [3] => mart podd
            [4] => podfakeemail@gmail.com
            [5] => 
            [6] => Via Riccione N. 20/18
            [7] => 
            [8] => Sa Tiacca Quartu S. Elena
            [9] => CA
            [10] => 09847
            [11] => Italy
            [12] => Podd Mart
            [13] => +39 342 000 9876
            [14] => Via Riccione N. 30/32
            [15] => 
            [16] => Sa Tiacca Quartu S. Elena
            [17] => CA
            [18] => 09847
            [19] => Italy
            [20] => 302667176336
            [21] => 2x Funny Car & Van or Camper WV Eyelash Vinyl Sticker Decal, Signs - Any Colour!
            [22] => 
            [23] => No
            [24] => 2
            [25] => £1.99
            [26] => £3.14
            [27] => 
            [28] => £0.00
            [29] => £0.00
            [30] => £7.12
            [31] => No
            [32] => PayPal
            [33] => 23-Jan-20
            [34] => 23-Jan-20
            [35] => 24-Jan-20
            [36] => 
            [37] => 
            [38] => 24-Jan-20
            [39] => Yes
            [40] => 
            [41] => 
            [42] => 25C157351T667760U
            [43] => Royal Mail International Standard
            [44] => 
            [45] => 1709118816020
            [46] => 
            [47] => No
            [48] => 
            [49] => No
            [50] => 
            [51] => No
        )

    [2] => Array
        (
            [0] => 15320
            [1] => 20-04482-41274
            [2] => wideboy3480
            [3] => BEN ROYLES
            [4] => wideboyemail@hotmail.co.uk
            [5] => Yellow please
            [6] => 10
            [7] => Broomstick Close
            [8] => Okehampton
            [9] => Devon
            [10] => EX20 1FT
            [11] => United Kingdom
            [12] => Ben Royles
            [13] => +44 7876 401999
            [14] => 105
            [15] => Broomstick Close
            [16] => Okehampton
            [17] => Devon
            [18] => EX10 1WT
            [19] => United Kingdom
            [20] => 302713568952
            [21] => Junglist Soldier Car Window Laptop Wall Gift Drum Bass dnb Jungle Vinyl Sticker
            [22] => 
            [23] => No
            [24] => 1
            [25] => £1.99
            [26] => £0.00
            [27] => 
            [28] => £0.00
            [29] => £0.00
            [30] => £1.99
            [31] => No
            [32] => PayPal
            [33] => 01-Feb-20
            [34] => 01-Feb-20
            [35] => 03-Feb-20
            [36] => 
            [37] => 
            [38] => 
            [39] => No
            [40] => 
            [41] => 
            [42] => 7SD68673EE278782X
            [43] => Royal Mail 1st Class
            [44] => 
            [45] => 1711667179020
            [46] => 
            [47] => No
            [48] => 
            [49] => No
            [50] => 
            [51] => No
        )

        <!---And so on--->

Код, используемый для сгенерируйте это следующим образом ...

<code><?php
    function readCSV($csvFile)
    {
        $line_of_text = [];
        $file_handle = fopen($csvFile, 'r');
        fgetcsv($file_handle);
        fgetcsv($file_handle);
        fgetcsv($file_handle);
        while (!feof($file_handle)) {
            $tmp = fgetcsv($file_handle, 1024);

            if (isset($line_of_text[$tmp[0]])) {
                foreach ($tmp as $k => $v) {

                    if (array_key_exists($k, $line_of_text[$tmp[0]])) {
                        if (!is_array($line_of_text[$tmp[0]][$k])) {
                            $kVal = $line_of_text[$tmp[0]][$k];

                            $line_of_text[$tmp[0]][$k] = [];
                            $line_of_text[$tmp[0]][$k][] = $kVal;
                        }

                        $line_of_text[$tmp[0]][$k][] = $v;
                        $line_of_text[$tmp[0]][$k] = array_unique($line_of_text[$tmp[0]][$k]);
                        $line_of_text[$tmp[0]][$k] = array_filter($line_of_text[$tmp[0]][$k]);

                        if (count($line_of_text[$tmp[0]][$k]) == 1) {
                            $line_of_text[$tmp[0]][$k] = array_values($line_of_text[$tmp[0]][$k]);
                            $line_of_text[$tmp[0]][$k] = $line_of_text[$tmp[0]][$k][0];
                        }

                        if (empty($line_of_text[$tmp[0]][$k])) {
                            $line_of_text[$tmp[0]][$k] = null;
                        }

                    } else {
                        $line_of_text[$tmp[0]][$k] = null;
                    }
                }
                $line_of_text[$tmp[0]][0] = $tmp[0];

            } else {
                $line_of_text[$tmp[0]] = $tmp;
            }

        }

        fclose($file_handle);
        return array_filter(array_values($line_of_text));
    }

    // Set path to CSV file
    $csvFile = 'test.csv';
    $csv = readCSV($csvFile);

echo '<pre>';
print_r($csv);
echo '
'; ?>

Я хочу использовать данные из этих автоматически сгенерированных массивов для автоматического создания страниц счетов, которые я создал с использованием разметки html / php.

Мне удалось создать пример, нацеленный на данные из 1-й записи [0], как в следующем примере фрагмента ...

    <td style="vertical-align: top; width: 100%; text-align:right;">
        <b>Name:&nbsp;</b><br />
        <b>Phone:&nbsp;</b><br />
        <b>Email:&nbsp;</b><br />
        <b>Paid Via:&nbsp;</b><br />
        <b>Sold Via:&nbsp;</b><br />
        <b>User ID:&nbsp;</b><br />
        <b>Sales Rec:&nbsp;</b><br />
        <b>Order No.:&nbsp;</b>
    </td>
    <td style="vertical-align: top; width: 311px;"><?php echo $csv[0][3]; ?><br />
        <?php echo $csv[0][13]; ?><br />
        <?php echo $csv[0][4]; ?><br />
        <?php echo $csv[0][32]; ?><br />
        eBay<br />
        <?php echo $csv[0][2]; ?><br />
        <?php echo $csv[0][0]; ?><br /> 
        <?php echo $csv[0][1]; ?><br />
    </td>

Я хочу использовать * Страница 1018 *, которую я сделал для шаблона, отображает данные каждого ордера в foreach l oop. Мне нужно было бы наметить, где на странице проходит каждый элемент суб-данных (как в примере выше), но он должен циклически проходить по каждому заказу, генерируя новую страницу из моего шаблона (для каждого заказа), пока не достигнет конца. Надеюсь, что это имеет смысл, пожалуйста, задавайте любые вопросы, которые помогут уточнить, чего я пытаюсь достичь, если я не прояснил это достаточно.

Примечание: в примере массива, в котором я использовал 1-й порядок, есть 2 элемента и 2 заказа после этого имеют 1 товар в каждом заказе, это типичные данные, заказ может иметь 1 или несколько товаров.

1 Ответ

1 голос
/ 19 марта 2020

Вы имеете в виду

<?php
foreach ($csv as $order) : ?>
    <td style="vertical-align: top; width: 100%; text-align:right;">
        <b>Name:&nbsp;</b><br />
        <b>Phone:&nbsp;</b><br />
        <b>Email:&nbsp;</b><br />
        <b>Paid Via:&nbsp;</b><br />
        <b>Sold Via:&nbsp;</b><br />
        <b>User ID:&nbsp;</b><br />
        <b>Sales Rec:&nbsp;</b><br />
        <b>Order No.:&nbsp;</b>
    </td>
    <td style="vertical-align: top; width: 311px;"><?php echo $csv[0][3]; ?><br />
        <?php echo $order[13]; ?><br />
        <?php echo $order[4]; ?><br />
        <?php echo $order[32]; ?><br />
        eBay<br />
        <?php echo $order[2]; ?><br />
        <?php echo $order[0]; ?><br /> 
        <?php echo $order[1]; ?><br />
    </td>
<?php endforeach; ?>

Кстати, не используйте давно устаревший тег <b> (<strong> предпочтительнее, если вы это имеете в виду; в противном случае используйте CSS), и <br> не нужно sla sh.

...