我有一个文件,它从MYSQL数据库中提取数据来创建标签。我在标签结束的地方添加了一个字符串"BREAK"。我的数据文件如下所示。
---------启动文件-------破订单: 10000名称: XYZ电话: XXX-XXX-XXX6 x ABC6 x 主 ST6 x 城市6 x 状态6 x 国家破订单: 10001名称:XYZ1电话: XXX-XXX-XXXBMCMJ ST城市州国家破订单: 10002名称: XYZ2电话: XXX-XXX-XXXBMCMJ ST城市州国家......更多订单..---------结束文件-------
除了读取 3 个或更多块并将它们分开打印之外,对于第一个块"6 x",我想从块中删除"6 x",而是将 6 作为值存储在变量中,以便与 lpr/print 命令一起使用在 unix 上打印 6 个副本。这不是一个主要问题,我以后可能会弄清楚,但是在php中读取这些块并从中创建3个或更多文件是我的要求。
这个小脚本将您的订单解析为多维数组(请参阅下面的输出)。从这个数组中,您可以生成任何其他格式,例如将其插入数据库,将其写入其他文件或其他任何格式。
解析 器
$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
)
)
)
)