从txt文件中获取正确的信息

时间:2016-08-30 12:42:08

标签: php arrays json xml

我正在使用php从文本文件中获取一些信息。 但我不能让我的阵列获取正确的信息。

这基本上是文本文件的内容:

FIRSTNAME=firstname
NAME=lastname
STREET=street adress
CITY=cityname
ZIP=zipcode
COUNTRY=country
ISOCOUNTRY=US
EMAIL=email@domene.com
MOBILENO=123456789
USERNO=somenumber



[PRODUCT]
QTY=2
ALPROJECTID=1123208
PRICE=134,00
DESCRIPTION=product1
ARTNO=1


[PRODUCT]

QTY=1
ALPROJECTID=1123208
PRICE=134,00
DESCRIPTION=product1
ARTNO=1

有没有办法将第二种产品作为2种产品输出?

这是我写的代码:

  $articles = array();

//foreach( $articles as $article ){
$prodno = (int)$lines['ARTNO'];
$prodno = $artkobling[$prodno];

$articles['theproduct'][$prodno][$projectid] = array(
'prodno' =>  $prodno,
'quantity' =>  $lines['QTY'],
'product' =>  $lines['TYPE'],
'product' =>  $lines['TYPE'],
'referenceid' => $lines['ORDERID'],
'refid' => $lines['CUSTOMERID'],
'unitprice' => (int)$lines['PRICE']
);


$orderdata = array(
'userid' => $this->account,
'fullname' => $lines['FIRSTNAME'] . " " . $lines['NAME']   ,
'address'  => $lines['STREET'],
'zipcode'  => $lines['ZIP'],
'city'  => $lines['CITY'],
'article' => $articles,
'comment' =>  $lines['CUSTOMERID'] . " " . $lines['ORDERID']   ,
);

当我调试它时,它按预期工作,并从一个产品获得结果。但是我怎么能得到2个产品的结果。我不确定我是否足够好解释这个问题。如果文件是JSON或XML而不是txt格式会更容易。

1 个答案:

答案 0 :(得分:1)

我会使用parse_ini_string将文本文件转换为数据结构。

//read the file contents
$raw = file_get_contents('/path/to/textfile.txt');

//replace [PRODUCT] with [PRODUCT_0], [PRODUCT_1]...    
$raw = preg_replace_callback(
    '/\[PRODUCT\]/',
    function() {static $i=0; return '[PRODUCT_'.$i++.']';}
    ,$raw, -1, $count);

//parse raw string into an array
$data = parse_ini_string($raw,true);

//extract the products into their own array. This assumes that
//[PRODUCT] sections are always at the end of the file
$products = array_values(array_splice($data,$count*-1));

//Build the final array
$data = $data + ['PRODUCTS'=>$products];

这会将您的文本文件转换为$data数组,该数组包含每个属性的键,以及键PRODUCTS下各自的数组中的所有产品。

Live demo

作为奖励,$count是产品数量。从那里你可以用数据做你想做的事。