2012-04-20 7 views
0

私はMYSQLデータベースからデータを抽出してラベルを作成するファイルを持っています。私は、ラベルが終わるところに文字列 "BREAK"を追加しました。私のデータファイルはこのように見えます。 3つの以上のブロックを読み取り、それらを分離する印刷することに加えてラベルを作成するために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 ------- 

、「6×」である最初のブロックについて、私はブロックから「6×」を削除し、代わりに値として6を保存したいと思いunix上でlpr/printコマンドで使用して、6つのコピーを印刷するための変数です。これは大きな問題ではない、私はおそらくそれを理解することができますが、PHPでこれらのブロックを読んで、それらから3つ以上のファイルを作成する私の要件です。

+0

は、あなたはちょうどあなたが何をしたいのサンプル出力を追加することができます... – Baba

+0

しかし私はBREAK BREAKタグの間のファイルにスライスこの情報が必要最後ではないので、ファイルの最後まで読み込むべきです。 –

答えて

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

クイック返信をありがとう。私はスクリプトを試しましたが、どのように出力を印刷することができます。この例で示した出力は表示されません。 –

+0

print_r($ ordersData); –

+0

偉大な..私は期待どおりのデータを取得しています..おかげでsooooooo多く..どのように私はそれをプリンタに送ることができるように各配列のファイルを作成するのですか?同じ例では、配列ごとに3つのファイルがあり、アドレスヘッダーやその下の項目などの関連情報のみが必要です。 –

関連する問題