Файл помещает содержимое в массив
Я использую функцию file_put_contents($file, $data);
для размещения содержимого в файле, потому что эти файлы создаются на лету с именем сеансов, $datastrong > - это многомерный массив, когда я эхо его массива распечатывается отлично, но в файле содержимое не записывается, кроме слова Массив
Что мне делать или есть какая-либо другая функция, которая автоматически создает файл и записывает данные (массив)?
Спасибо.
Ответы
Ответ 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);