2012-04-20 67 views
0

我有一个从MYSQL数据库提取数据以创建标签的文件。我在标签结束处添加了一个字符串“BREAK”。我的数据文件看起来像这样。阅读PHP中用于创建标签的文件部分

 
--------- Start File ------- 

BREAK 
Order: 10000 
NAME: XYZ 
Phone: XXX-XXX-XXX 

6 x ABC 
6 x Main ST 
6 x CITY 
6 x STATE 
6 x COUNTRY 

BREAK 
Order: 10001 
NAME: XYZ1 
Phone: XXX-XXX-XXX 

BMC 
MJ ST 
CITY 
STATE 
COUNTRY 

BREAK 
Order: 10002 
NAME: XYZ2 
Phone: XXX-XXX-XXX 

BMC 
MJ ST 
CITY 
STATE 
COUNTRY 

......more orders.. 

--------- End File ------- 

除了读取3点或更多的块和打印分开它们,对于第一块,这是“6×”,我想从块中删除“6 x”和替代地存储6作为值在与unix上的lpr/print命令一起使用的变量中,用于打印6份副本。这不是一个大问题,我可以稍后解决它,但在php中阅读这些块并从它们创建3个或更多文件是我的要求。

+0

你想补充样本输出你想要什么? – Baba 2012-04-20 20:53:30

+0

我需要切成BREAK标签但是BREAK之间的文件信息并不是最后的命令,它应该读取直到文件结束。 – 2012-04-20 21:34:08

回答

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 
         ) 

       ) 

     ) 

) 
+0

感谢您的快速回复。我试过这个脚本,但是我怎样才能打印输出。我没有看到你在示例中显示的输出。 – 2012-04-22 14:03:54

+0

print_r($ ordersData); – 2012-04-22 17:41:44

+0

好..它正在获取数据,因为我预计..谢谢sooooooo多..现在我如何创建每个阵列的文件,以便我可以将它们发送到打印机。对于同一个例子,我应该为每个数组提供3个文件,只有地址头和其下的项目等相关信息。 – 2012-04-23 02:41:18