2012-04-20 39 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