2012-04-20 2 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 "X"가 첫 번째 블록에 대해, 별도의 인쇄와, I 블록에서 "× 6"를 제거하고 대신 값으로 6 저장하고자 unix에서 lpr/print 명령과 함께 사용되어 6 개의 사본을 인쇄하는 변수에 저장됩니다. 이것은 큰 문제는 아니지만, 나중에 알아낼 수 있지만 PHP에서 이러한 블록을 읽고 그들로부터 3 개 이상의 파일을 만드는 것은 필자의 요구 사항입니다.

+0

당신은 내가 그러나 BREAK BREAK 태그 사이에 파일로 슬라이스이 정보가 필요합니다 ... 당신이 원하는 무엇 – Baba

+0

을 샘플 출력을 추가 할 수 끝이 아니므로 마지막 순서는 파일의 끝까지 읽어야합니다. –

답변

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 개의 파일이 있어야하며 주소 헤더와 그 아래의 항목과 같은 관련 정보 만 있어야합니다. –