У меня есть массив, который я хочу записать в файл. Этот файл будет включен в другой скрипт, а массив прочитан и обработан.
Массив содержит числа с плавающей запятой, округленные до двух десятичных знаков, используя number_format(round($number, 2), 2, '.', '')
(чтобы сохранить нули):
print_r($array,true);
Array
(
[0] => Array
(
[0] => 320
[1] => 128
[2] => 4.10
[3] => 4.10
)
[1] => Array
etc.
Когда я var_export
массив, настройка $return = FALSE
, он экспортируется с номерами с фиксированной запятой, заключенными в кавычки:
$data = '<?php $array =' . var_export($array, FALSE) . '; ?>';
file_put_contents ($filename, $data);
array (
0 =>
array (
0 => 320,
1 => 128,
2 => '4.10',
3 => '4.10',
),
1 =>
etc.
Когда я var_export
с $return = TRUE
, кавычек нет:
$data = '<?php $array =' . var_export($array, TRUE) . '; ?>';
file_put_contents ($filename, $data);
array (
0 =>
array (
0 => 320,
1 => 128,
2 => 4.10,
3 => 4.10,
),
1 =>
etc.
Из тестов я знаю, что оба кода будут выполняться одинаково в моей системе. Так чего мне не хватает? Когда я должен использовать TRUE
и когда FALSE
и какова цель этих кавычек?
Второй параметр определяет, var_export
вернет свое представление значения, или echo
это напрямую.
Посмотрите на этот пример:
$x = array(1);
$r_false = var_export($x, false); // array ( 0 => 1, )
$r_true = var_export($x, true); // **nothing is printed**
var_export($r_false); // NULL
var_export($r_true); // 'array ( 0 => 1, )'
Оба приведенных вами примера должны работать, но я был бы очень удивлен, если бы они создавали один и тот же файл.
Вот что я ожидал от каждого:
$array = array(1);
$data = '<?php $array =' . var_export($array, TRUE) . '; ?>';
file_put_contents($filename, $data);
// contents of file:
<?php $array =array ( 0 => 1, ); ?>
//
// VS:
//
$array = array(1);
$data = '<?php $array =' . var_export($array, TRUE) . '; ?>';
file_put_contents($filename, $data);
// contents of file:
<?php $array =; ?>
// Here the value of $data is NULL, which becomes ''
Других решений пока нет …