2016-08-30 31 views
0

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

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

FIRSTNAME=firstname 
NAME=lastname 
STREET=street adress 
CITY=cityname 
ZIP=zipcode 
COUNTRY=country 
ISOCOUNTRY=US 
[email protected] 
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'] , 
); 

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

+0

你如何填充你的'$ lines'数组?我在这里看不到代码 – BeetleJuice

+0

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

+0

即时处理文件与ftp .opendir – Slistryko

回答

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是产品的数量。从那里你可以做你想要的数据。

+0

这太棒了!它有可能让脚本运行,如果我有()内pruduct?通常文本文件如下所示:[PRODUCT] (custom) TYPE = newproduct4 PAPERTYPE = 1 QTY = 2 – Slistryko