Сортировать обычные текстовые данные в php - PullRequest
0 голосов
/ 20 декабря 2018

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

G28585 alphabounce + 20 $ 55,00 $ 55,00 $ 1 100,00 FTWWHT/ CYBEMT / ECRTIN Размер 9–11 11–12 12–13 14 Кол-во 2 6 2 2 1 4 3 D97028 adizero 8,0 100 $ 66,00 $ 66,00 $ 6 600,00 FTWWHT / POWRED / ACTRED Размер 9 9–10 10–11 11–12 12–13 13- 14 Кол-во 5 5 10 8 15 10 17 9 14 4 3 D97031 adizero 8,0 SK 68 $ 68,75 $ 68,75 $ 4 675,00 FTWWHT / POWRED / ACTRED Размер 10 10- 11 11- 12 12- 13 13- 14 15 Кол-во 3 4 4 3 5 3 254 15 2 F97396 Freak Carbon Low 37 $ 49,50 $ 49,50 $ 1 831,50 FTWWHT / POWRED / ACTRED Размер 9 9–10 10–11 11–12 12–13 14 Кол-во 2 1 3 4 3 2 6 3 7 6

Я пытаюсь сохранить его в этом формате, и я не могу его выделить, как разделить текст, поскольку у меня нет разделителя:

G28585 alphabounce + 20 $ 55.00 $ 55.00$ 1100,00 FTWWHT / CYBEMT / ECRTIN Размер 9–11 11–12 12–13 14 Кол-во 2 6 2 2 1 4 3

............

D97028 adizero 8,0 100 $ 66,00 $ 66,00 $ 6 600,00 FTWWHT / POWRED / ACTRED Размер 9 9–10 10–11 11–12 12- 13 13- 14 Кол-во 5 5 10 8 15 10 17 9 14 4 3

пожалуйста, руководство, любая помощь будет оценена.Это PDF, из которого я получаю текст .. enter image description here

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Вы можете сделать это, если ваш код содержит только символ, за которым следуют 5 цифр

$str = "G28585 alphabounce+ 20 $55.00 $55.00 $1,100.00 FTWWHT/CYBEMT/ECRTIN Size 9- 11 11- 12 12- 13 14 Qty 2 6 2 2 1 4 3 D97028 adizero 8.0 100 $66.00 $66.00 $6,600.00 FTWWHT/POWRED/ACTRED Size 9 9- 10 10- 11 11- 12 12- 13 13- 14 Qty 5 5 10 8 15 10 17 9 14 4 3 D97031 adizero 8.0 SK 68 $68.75 $68.75 $4,675.00 FTWWHT/POWRED/ACTRED Size 10 10- 11 11- 12 12- 13 13- 14 15 Qty 3 4 4 3 5 3 25 4 15 2 F97396 Freak Carbon Low 37 $49.50 $49.50 $1,831.50 FTWWHT/POWRED/ACTRED Size 9 9- 10 10- 11 11- 12 12- 13 14 Qty 2 1 3 4 3 2 6 3 7 6";

 $splitted = preg_split('/(?=[A-Z][0-9]){6}/',$str,-1,PREG_SPLIT_NO_EMPTY);

print_r($splitted);

http://sandbox.onlinephpfunctions.com/code/7ad702ae20c9884c8c2348052610ad979f43d876

0 голосов
/ 20 декабря 2018

другое решение с регулярными выражениями

$raw = 'G28585 SOUTH DAKOTA, U OF SDAKO GAMEMODE POL 20 $55.00 $55.00 $1,100.00 FTWWHT/CYBEMT/ECRTIN Size 9- 11 11- 12 12- 13 14 Qty 2 6 2 2 1 4 3 D97028 adizero 8.0 100 $66.00 $66.00 $6,600.00 FTWWHT/POWRED/ACTRED Size 9 9- 10 10- 11 11- 12 12- 13 13- 14 Qty 5 5 10 8 15 10 17 9 14 4 3 D97031 adizero 8.0 SK 68 $68.75 $68.75 $4,675.00 FTWWHT/POWRED/ACTRED Size 10 10- 11 11- 12 12- 13 13- 14 15 Qty 3 4 4 3 5 3 25 4 15 2 F97396 Freak Carbon Low 37 $49.50 $49.50 $1,831.50 FTWWHT/POWRED/ACTRED Size 9 9- 10 10- 11 11- 12 12- 13 14 Qty 2 1 3 4 3 2 6 3 7 6';

$pattern ='/(?<style>\w+) (?<descr>[a-zA-Z, 0-9.+]+) (?<prices>[$0-9., ]+) (?<color>\w+\/\w+\/\w+) Size (?<size>[0-9 -]+) Qty (?<quantity>[0-9 ]+)/';

preg_match_all($pattern, $raw, $matches);
$matches = array_diff_key($matches, range(0, 6));
print_r($matches);

вывод:

Array
(
    [style] => Array
        (
            [0] => G28585
            [1] => D97028
            [2] => D97031
            [3] => F97396
        )

    [descr] => Array
        (
            [0] => SOUTH DAKOTA, U OF SDAKO GAMEMODE POL 20
            [1] => adizero 8.0 100
            [2] => adizero 8.0 SK 68
            [3] => Freak Carbon Low 37
        )

    [prices] => Array
        (
            [0] => $55.00 $55.00 $1,100.00
            [1] => $66.00 $66.00 $6,600.00
            [2] => $68.75 $68.75 $4,675.00
            [3] => $49.50 $49.50 $1,831.50
        )

    [color] => Array
        (
            [0] => FTWWHT/CYBEMT/ECRTIN
            [1] => FTWWHT/POWRED/ACTRED
            [2] => FTWWHT/POWRED/ACTRED
            [3] => FTWWHT/POWRED/ACTRED
        )

    [size] => Array
        (
            [0] => 9- 11 11- 12 12- 13 14
            [1] => 9 9- 10 10- 11 11- 12 12- 13 13- 14
            [2] => 10 10- 11 11- 12 12- 13 13- 14 15
            [3] => 9 9- 10 10- 11 11- 12 12- 13 14
        )

    [quantity] => Array
        (
            [0] => 2 6 2 2 1 4 3 
            [1] => 5 5 10 8 15 10 17 9 14 4 3 
            [2] => 3 4 4 3 5 3 25 4 15 2 
            [3] => 2 1 3 4 3 2 6 3 7 6
        )

)
0 голосов
/ 20 декабря 2018

Вы можете поместить разделитель перед кодом продукта (это, кажется, уникальный шаблон), а затем разделить его.Здесь я использую новую строку в качестве разделителя:

<?php

$txt = "G28585 alphabounce+ 20 $55.00 $55.00 $1,100.00 FTWWHT/CYBEMT/ECRTIN Size 9- 11 11- 12 12- 13 14 Qty 2 6 2 2 1 4 3 D97028 adizero 8.0 100 $66.00 $66.00 $6,600.00 FTWWHT/POWRED/ACTRED Size 9 9- 10 10- 11 11- 12 12- 13 13- 14 Qty 5 5 10 8 15 10 17 9 14 4 3 D97031 adizero 8.0 SK 68 $68.75 $68.75 $4,675.00 FTWWHT/POWRED/ACTRED Size 10 10- 11 11- 12 12- 13 13- 14 15 Qty 3 4 4 3 5 3 25 4 15 2 F97396 Freak Carbon Low 37 $49.50 $49.50 $1,831.50 FTWWHT/POWRED/ACTRED Size 9 9- 10 10- 11 11- 12 12- 13 14 Qty 2 1 3 4 3 2 6 3 7 6";

var_export(
    preg_split(
        '/\R/',
        trim(
            preg_replace(
                '/([A-Z][0-9]+)/',
                "\n$1",
            $txt)
        )
    )
);

Вывод:

array (
  0 => 'G28585 alphabounce+ 20 $55.00 $55.00 $1,100.00 FTWWHT/CYBEMT/ECRTIN Size 9- 11 11- 12 12- 13 14 Qty 2 6 2 2 1 4 3 ',
  1 => 'D97028 adizero 8.0 100 $66.00 $66.00 $6,600.00 FTWWHT/POWRED/ACTRED Size 9 9- 10 10- 11 11- 12 12- 13 13- 14 Qty 5 5 10 8 15 10 17 9 14 4 3 ',
  2 => 'D97031 adizero 8.0 SK 68 $68.75 $68.75 $4,675.00 FTWWHT/POWRED/ACTRED Size 10 10- 11 11- 12 12- 13 13- 14 15 Qty 3 4 4 3 5 3 25 4 15 2 ',
  3 => 'F97396 Freak Carbon Low 37 $49.50 $49.50 $1,831.50 FTWWHT/POWRED/ACTRED Size 9 9- 10 10- 11 11- 12 12- 13 14 Qty 2 1 3 4 3 2 6 3 7 6',
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...