Чтение значений из файла, который содержит ассоциативный массив Stack Overflow

Мне нужно прочитать содержимое файла с именем orders.log с PHP и использовать переменные. Файл журнала хранится так:

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». Любая помощь будет оценена.

0

Решение

Это предполагает, что каждая запись имеет длину 20 строк, она читает в файле журнала и разбивает ее на 20 сегментов, используя array_chunk(),

Затем он обрабатывает каждый сегмент, сначала разбивая линии по => с помощью 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;

Третий способ, который не основан на том, что данные имеют одинаковый формат, — это чтение построчно и попытка определить конец самого элемента (просто строка, содержащая )) …

$fp = fopen("log.txt", "r");
$orderList = [];
$order = [];
while ( $line = fgets($fp)) {
// Remove extra data after content
$line = rtrim($line);
// If end of order (a line just starting with a ')')
if ( $line == ')' ) {
// Convert order into associative array
$split = [];
foreach ( $order as $line ) {
$info = explode("=>", $line);
if ( count($info) == 2){
$split[trim($info[0]," \t[]")] = trim ($info[1]);
}
}
// Add data to order list
$orderList[] = $split;
$order = [];
}
else {
// Add line to existing data
$order[] = $line;
}
}

print_r($orderList);
fclose($fp);
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector