файл положить содержимое с массивом - PullRequest
13 голосов
/ 27 июня 2009

Я использую функцию file_put_contents($file, $data); для помещения содержимого в файл, потому что эти файлы создаются на лету с именем сеансов, $ data - это многомерный массив, когда я отображаю массив, который он печатает в порядке, но в файле не записывается содержимое, кроме слова Array

Что мне делать или есть какая-либо другая функция, которая автоматически создает файл и записывает данные (массив)?

Спасибо.

Ответы [ 9 ]

27 голосов
/ 27 июня 2009

Вы хотите serialize() массив при записи и unserialize() после чтения файла.

$array = array('foo' => 'bar');
file_put_contents('foo.txt', serialize($array));
$array = unserialize(file_get_contents('foo.txt')));

О, и я действительно не знаю, как вы выводите свой массив, но echo array('foo' => 'bar'); всегда будет печатать Array.

4 голосов
/ 27 июня 2009

Если вы хотите, чтобы он был читабельным, вы можете сделать:

<?php
ob_start();
print_r($data);
$textualRepresentation = ob_get_contents();
ob_end_clean();

file_put_contents($file, $textualRepresentation);
?>
2 голосов
/ 18 июля 2018

Или используйте print_r , если вы хотите вернуть отформатированный массив, который более легко читается в текстовом файле

Если вы хотите захватить вывод print_r (), используйте return параметр. Когда для этого параметра установлено значение TRUE, print_r () вернется информация, а не печатать ее.

Код:

<code>$txt = "<pre>".print_r($data, true)."
"; file_put_contents ('file.txt', $ txt);
1 голос
/ 05 ноября 2018

Лучшим решением, если вы знакомы с выводом var_dump(), может быть захват его вывода и помещение его в файл или даже print_r() следующим образом:

ob_start();
print_r($array);
$result = ob_get_clean();
file_put_contents('file.txt', $result);

обратите внимание, что ob_get_clean() по существу выполняет и ob_get_contents(), и ob_end_clean().

1 голос
/ 20 ноября 2009

Определенно вы можете использовать var_export функцию:

$contents = var_export($array, true);

file_put_contents('foo.txt', "<?php\n return {$contents};\n ?>");
// and then use something like this to get it:
$new_array = require('foo.txt');
1 голос
/ 27 июня 2009

Вы можете сериализовать массив и затем использовать его после загрузки файла обратно. Вы также можете закодировать массив как объект JSON с помощью json_encode и записать в .json файл.

0 голосов
/ 05 октября 2018
$content="< ?php"."\r\n";
$str = json_encode($array);
$content.="$";
$content.="list=json_decode('";
$content.=$str;
$content.="');";
$ds=DIRECTORY_SEPARATOR;
file_put_contents(__DIR__ . $ds . 'list.php', $content);       
0 голосов
/ 09 ноября 2017

Как лучший ответ, использование serialize - хороший вариант. Однако вы также можете сохранить массив с помощью PHP_EOL после каждого элемента массива и использовать команду file для извлечения массива.

function file_put_array($path, $contents)
{
    if (is_array($contents))
    {
        foreach ($contents as $item)
            $str .= $item.PHP_EOL;
        file_put_contents($path, $str);
        return true;
    }
    return false;
}

И получить содержимое:

$contents = file($path, FILE_IGNORE_NEW_LINES);
0 голосов
/ 27 июня 2009

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

function file_put_contents_deep( $file, $data) {
  if ( is_array( $data ) {
    foreach ( $data as $item ) {
      if (is_array( $item ) {
        file_put_contents_deep( $file, $item );
      else {
        file_put_contents( $file, $item);
      }
    }
  } else {
    file_put_contents( $file, $data );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...