Php 从包含关联数组的文件中读取值

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.

我需要用PHP读取名为orders.log的文件的内容,并使用变量。日志文件的存储方式如下:

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())由于最终将得到一个段数组,您可能需要在之后对其进行处理,以查看需要哪些段。最后一个代码示例适用于可变大小的元素。是的,我根据自己的需要调整了变量,看起来效果很好。非常感谢。