Файл помещает содержимое в массив

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

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

Спасибо.

Ответ 1

Вы хотите 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.

Ответ 2

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

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

file_put_contents($file, $textualRepresentation);
?>

Ответ 3

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

Ответ 4

Definetelly вы можете использовать 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');

Ответ 5

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

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 );
  }
}

Ответ 6

Как лучший ответ, использование 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);