читать массив php, сохраненный в файле? - PullRequest
11 голосов
/ 14 февраля 2011

у меня есть несколько массивов php, сохраненных в файле .log

я хочу прочитать их в массиве php, например

array [0] = 1-й массив в файле .log массив 1 = 2-й массив в файле .log

решение здесь у меня не работает

это не дает такой ошибки файла или каталога, но когда я включаю include_once ('file.log'), содержимое файла отображается как вывод (я не знаю почему), пожалуйста, помогите

Ответы [ 4 ]

17 голосов
/ 15 февраля 2011

Вы можете serialize массив перед записью его в виде текста в файл. Затем вы можете прочитать данные обратно из файла, unserialize превратит их обратно в массив.

http://php.net/manual/en/function.serialize.php

РЕДАКТИРОВАТЬ Описание процесса использования сериализации / десериализации:

Итак, у вас есть массив:

$arr = array(
  'one'=>array(
      'subdata1',
      'subdata2'
  ),
  'two'='12345'
);

Когда я вызываю serialize для этого массива, я получаю строку:

$string = serialize($arr);
echo $string;

OUTPUT: a:2:{s:3:"one";a:2:{i:0;s:8:"subdata1";i:1;s:8:"subdata2";}s:3:"two";s:5:"12345";}

Итак, я хочу записать эти данные в файл:

$fn= "serialtest.txt";
$fh = fopen($fn, 'w');
fwrite($fh, $string);
fclose($fh);

Позже я хочу использовать этот массив. Итак, я прочитаю файл, затем произнесу сериализацию:

$str = file_get_contents('serialtest.txt');
$arr = unserialize($str);
print_r($arr);

OUTPUT: Array ( [one] => Array ( [0] => subdata1 [1] => subdata2 ) [two] => 12345 ) 

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ 2 Вложенная демонстрация

Чтобы со временем хранить в этом файле больше массивов, вам нужно создать родительский массив. Этот массив является контейнером для всех данных, поэтому, если вы хотите добавить другой массив, вам нужно распаковать родительский объект и добавить к нему новые данные, а затем заново упаковать все.

Сначала настройте свой контейнер:

// Do this the first time, just to create the parent container
$parent = array();
$string = serialize($arr);
$fn= "logdata.log";
$fh = fopen($fn, 'w');
fwrite($fh, $string);
fclose($fh);

Теперь, когда вы захотите добавить новый массив, сначала вы должны получить весь пакет и десериализовать его:

// get out the parent container
$parent = unserialize(file_get_contents('logdata.log'));

// now add your new data
$parent[] = array(
  'this'=>'is',
  'a'=>'new',
  'array'=>'for',
  'the'=>'log'
);

// now pack it up again
$fh = fopen('logdata.log', 'w');
fwrite($fh, serialize($parent));
fclose($fh);
2 голосов
/ 26 июля 2014

На самом деле требуется 2 строки кода ($ ar - это массив, а $ filename - это путь + имя файла, куда вы хотите сохранить):

Чтобы сохранить массив:

file_put_contents($ filename, serialize ($ ar));

для чтения массива обратно:

$ ar = unserialize (file_get_contents ($ filename));

1 голос
/ 15 февраля 2011

вам нужно «вернуть» массив, открыть журнал file.log и сверху добавить возврат

1 голос
/ 15 февраля 2011

include_once отображает вывод, так что это не неожиданно.Не могли бы вы предоставить формат файла?

Вы можете использовать file_get_contents ('file.log'), чтобы получить содержимое файла, а затем легко поместить его в массив оттуда (например, с помощью preg_split).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...