【问题标题】:Get properly info out from txt file从 txt 文件中获取正确的信息
【发布时间】:2016-08-30 12:42:08
【问题描述】:

我正在使用 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 格式会更容易。

【问题讨论】:

  • 如何填充$lines 数组?我在这里看不到该代码
  • articles = array(); //foreach( $articles as $article ){ $prodno = (int)$lines['ARTNO']; $prodno = $artkobling[$prodno];
  • 我用 ftp .opendir 处理文件

标签: php arrays json xml


【解决方案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 是产品数量。从那里你可以对数据做你想做的事情。

【讨论】:

  • 这太棒了!如果我在 pruduct 中有 () 是否可以让脚本运行?文本文件通常如下所示: [PRODUCT] (custom) TYPE=newproduct4 PAPERTYPE=1 QTY=2
猜你喜欢
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多