0

我有一个从 MYSQL 数据库中提取数据以创建标签的文件。我在标签结束的地方添加了一个字符串“BREAK”。我的数据文件看起来像这样。

--------- 开始文件 -----

休息
订购:10000
名称:XYZ
电话:XXX-XXX-XXX

6 x ABC
6 x 主 ST
6 x 城市
6 x 状态
6 个国家

休息
订购:10001
名称:XYZ1
电话:XXX-XXX-XXX

BMC
乔丹街
城市
状态
国家

休息
订购:10002
名称:XYZ2
电话:XXX-XXX-XXX

BMC
乔丹街
城市
状态
国家

......更多订单..

--------- 结束文件 --------

除了读取 3 个或更多块并将它们分开打印之外,对于第一个块“6 x”,我想从块中删除“6 x”,而是将 6 作为值存储在要使用的变量中unix 上的 lpr/print 命令用于打印 6 个副本。这不是一个主要问题,我可能稍后会弄清楚,但是在 php 中读取这些块并从中创建 3 个或更多文件是我的要求。

4

1 回答 1

0

这个小脚本将您的订单解析为一个多维数组(见下面的输出)。从这个数组中,您可以生成任何其他格式,例如将其插入数据库、将其写入其他文件或其他任何内容。

解析器

$orders = explode("BREAK", $fileContents);
array_shift($orders); // only required if a "BREAK" is before the first order
$ordersData = array();
foreach($orders as $order) {

    if (preg_match("/Order: ([^\r\n]+)[\r\n]+NAME: ([^\r\n]+)[\r\n]+Phone: ([^\r\n]+)[\r\n]+(.+)/si", $order, $regs)) {

        $items = preg_split("/[\r\n]+/", $regs[4], null, PREG_SPLIT_NO_EMPTY);
        foreach ($items as &$item) {

            if (preg_match("/(\d+) *?x *?(.+)/", $item, $regs2)) {

                $item = array(
                    'count' => $regs2[1],
                    'item' => $regs2[2]
                );
            } else {

                $item = array(
                    'count' => 1,
                    'item' => $item
                );
            }
        }

        $orderData = array(
            'order_no' => $regs[1],
            'name' => $regs[2],
            'phone' => $regs[3],
            'items' => $items
        );

        $ordersData[] = $orderData;
    }
}

输出格式

$ordersData = Array
(
    [0] => Array
        (
            [order_no] => 10000
            [name] => XYZ
            [phone] => XXX-XXX-XXX
            [items] => Array
                (
                    [0] => Array
                        (
                            [count] => 6
                            [item] =>  ABC
                        )

                    [1] => Array
                        (
                            [count] => 6
                            [item] =>  Main ST
                        )

                    [2] => Array
                        (
                            [count] => 6
                            [item] =>  CITY
                        )

                    [3] => Array
                        (
                            [count] => 6
                            [item] =>  STATE
                        )

                    [4] => Array
                        (
                            [count] => 6
                            [item] =>  COUNTRY
                        )

                )

        )

    [1] => Array
        (
            [order_no] => 10001
            [name] => XYZ1
            [phone] => XXX-XXX-XXX
            [items] => Array
                (
                    [0] => Array
                        (
                            [count] => 1
                            [item] => BMC
                        )

                    [1] => Array
                        (
                            [count] => 1
                            [item] => MJ ST
                        )

                    [2] => Array
                        (
                            [count] => 1
                            [item] => CITY
                        )

                    [3] => Array
                        (
                            [count] => 1
                            [item] => STATE
                        )

                    [4] => Array
                        (
                            [count] => 1
                            [item] => COUNTRY
                        )

                )

        )

    [2] => Array
        (
            [order_no] => 10002
            [name] => XYZ2
            [phone] => XXX-XXX-XXX
            [items] => Array
                (
                    [0] => Array
                        (
                            [count] => 1
                            [item] => BMC
                        )

                    [1] => Array
                        (
                            [count] => 1
                            [item] => MJ ST
                        )

                    [2] => Array
                        (
                            [count] => 1
                            [item] => CITY
                        )

                    [3] => Array
                        (
                            [count] => 1
                            [item] => STATE
                        )

                    [4] => Array
                        (
                            [count] => 1
                            [item] => COUNTRY
                        )

                )

        )

)
于 2012-04-20T21:40:14.660 回答