Php 从包含关联数组的文件中读取值
我需要用PHP读取名为orders.log的文件的内容,并使用变量。日志文件的存储方式如下:Php 从包含关联数组的文件中读取值,php,arrays,Php,Arrays,我需要用PHP读取名为orders.log的文件的内容,并使用变量。日志文件的存储方式如下: Array ( [time] => 2099-99-99 00:00:00 [gateway] => Paypal [gatewayOK] => Yes [gatewayTransactionId] => XXXXXXX [POST] => Array ( [mc_gross] => 9.
Array
(
[time] => 2099-99-99 00:00:00
[gateway] => Paypal
[gatewayOK] => Yes
[gatewayTransactionId] => XXXXXXX
[POST] => Array
(
[mc_gross] => 9.99
[protection_eligibility] => Eligible
[address_status] => confirmed
[payer_id] => XXXXX
[address_street] => XXXXX
[payment_date] => 00:00:00 Nov 11, 2018 PDT
[payment_status] => Completed
[charset] => windows-1252
)
)
<?php
$orders=file_get_contents("orders.log");
echo $orders['time'];
echo $myarray[0]['gateway'];
echo $myarray[1]['mc_gross'];
?>
我试着这样读:
Array
(
[time] => 2099-99-99 00:00:00
[gateway] => Paypal
[gatewayOK] => Yes
[gatewayTransactionId] => XXXXXXX
[POST] => Array
(
[mc_gross] => 9.99
[protection_eligibility] => Eligible
[address_status] => confirmed
[payer_id] => XXXXX
[address_street] => XXXXX
[payment_date] => 00:00:00 Nov 11, 2018 PDT
[payment_status] => Completed
[charset] => windows-1252
)
)
<?php
$orders=file_get_contents("orders.log");
echo $orders['time'];
echo $myarray[0]['gateway'];
echo $myarray[1]['mc_gross'];
?>
但结果并没有达到预期的效果。它抛出“A”和“r”。任何帮助都将不胜感激 这假设每个条目有20行长,它读取日志文件,并使用
array\u chunk()
将其拆分为20个段
然后,它处理每个段,首先使用explode()
按=>
拆分行,然后将值添加到以左手边为键的关联数组中。然后可以使用该键访问每个值
$input = file("log.txt", FILE_IGNORE_NEW_LINES);
$orders = array_chunk($input, 20);
foreach ( $orders as $order ) {
$split = [];
foreach ( $order as $line ) {
$info = explode("=>", $line);
if ( count($info) == 2){
$split[trim($info[0]," \t[]")] = trim ($info[1]);
}
}
echo "gateway-".$split['gateway'].PHP_EOL;
echo "mc_gross-".$split['mc_gross'].PHP_EOL;
}
如果您想要所有订单的列表
$input = file("log.txt", FILE_IGNORE_NEW_LINES);
$orders = array_chunk($input, 20);
$orderList = [];
foreach ( $orders as $order ) {
$split = [];
foreach ( $order as $line ) {
$info = explode("=>", $line);
if ( count($info) == 2){
$split[trim($info[0]," \t[]")] = trim ($info[1]);
}
}
$orderList[] = $split;
}
echo "gateway-".$orderList[0]['gateway'].PHP_EOL;
echo "mc_gross-".$orderList[0]['mc_gross'].PHP_EOL;
第三种方法不依赖于数据的格式完全相同,它逐行读取,并尝试计算元素本身的结尾(仅包含)
)
文件的内容是否如您所示?你能改变它并将它保存为像JSON这样有用的东西吗?是的,很遗憾,我需要按原样读取文件。我无法将其解析为JSON或任何其他格式。是否每个记录都是相同的格式-就像在同一行的完全相同的字段中一样?是的。只是另一个声明另一个订单的数组集。如果您不能依赖始终为20行的详细信息,有一种方法-如果您有此问题,请告诉我。该文件还包含两个类似此数组的空白数据集([时间]=>2018-11-10 08:11:41[gateway]=>Stripe[gatewayOK]=>Yes[gatewayTransactionId]=>[POST]=>Array()[GET]=>Array())由于最终将得到一个段数组,您可能需要在之后对其进行处理,以查看需要哪些段。最后一个代码示例适用于可变大小的元素。是的,我根据自己的需要调整了变量,看起来效果很好。非常感谢。