Как сохранить массив в файле для доступа к массиву позже с 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));