Как сохранить массив в файле для доступа к массиву позже с PHP?
Я просто хочу быстро сохранить массив, который я получаю из удаленного API, чтобы я мог общаться с ним на локальном хосте.
Итак:
- В настоящее время у меня есть массив.
- Я хочу, чтобы люди использовали массив без необходимости получать его из API.
Здесь нет необходимости в эффективности, это не для фактического сайта, просто для того, чтобы получить некоторые методы санитации/форматирования, сделанные и т.д.
Есть ли функция типа store_array()
или restore_arrray()
?!
Ответы
Ответ 1
Лучший способ сделать это - сериализация JSON. Он читается человеком, и вы получите лучшую производительность (файл будет меньше и быстрее загружать/сохранять). Код очень прост. Всего две функции
Пример кода:
$arr1 = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
file_put_contents("array.json",json_encode($arr1));
# array.json => {"a":1,"b":2,"c":3,"d":4,"e":5}
$arr2 = json_decode(file_get_contents('array.json'), true);
$arr1 === $arr2 # => true
В этом примере вы можете легко создавать собственные функции store_array и restore_array.
Для сравнения скорости см. ориентир из Предпочтительный метод для хранения массивов PHP (json_encode vs serialize).
Ответ 2
Если вам не нужен файл дампа для чтения человеком, вы можете просто serialize()
массив.
хранения:
file_put_contents('yourfile.bin', serialize($array));
при получении:
$array = unserialize(file_get_contents('yourfile.bin'));
Ответ 3
Используйте serialize и unserialize
// storing
$file = '/tmp/out.data';
file_put_contents($file, serialize($mydata)); // $mydata is the response from your remote API
// retreiving
$var = unserialize(file_get_contents($file));
Или другой, хакерский способ:
var_export() делает именно то, что вы хотите, он примет любую переменную и сохранит ее в представлении, что парсер PHP может читать назад. Вы можете объединить его с file_put_contents, чтобы сохранить его на диске и использовать file_get_contents и eval, чтобы прочитать его.
// storing
$file = '/tmp/out.php';
file_put_contents($file, var_export($var, true));
// retrieving
eval('$myvar = ' . file_get_contents($file) . ';');
Ответ 4
Вы можете использовать serialize, чтобы превратить его в строку для записи в файл, а сопровождающий unserialize, чтобы вернуть его в структуру массива.
Я бы предложил использовать независимую от языка структуру, например JSON. Это позволит вам загружать файлы на разных языках, кроме PHP, в случае, если это будет возможно позже. json_encode, чтобы сохранить его, и json_decode ($str, true)
, чтобы вернуть его.
Ответ 5
Еще один быстрый способ, не упомянутый здесь:
Таким образом добавьте заголовок с <?php
start, имя переменной \$my_array =
с \$my_array =
\$
и нижним колонтитулом ?>
End tag.
Теперь можно использовать include()
как и любой другой действительный php-скрипт.
// storing
$file = '/tmp/out.php';
file_put_contents($file, "<?php\n\$my_array = ".var_export($var, true).";\n?>");
// retrieving as included script
include($file);
//testing
print_r($my_array);
out.php будет выглядеть так
<?php
$my_array = array (
'a'=>1,
'b'=>2,
'c'=>3,
'd'=>4,
'e'=>5
);
?>
Ответ 6
Используйте php serialze:
file_put_contents("myFile",serialize($myArray));