На днях было необходимо сохранять массивы в конфиг файлы, написал функцию для преобразования массива в строковое представление. Возможно кому-то будет нужно, оставлю тут.
Кормим массив, и получаем его строковое представление. В отличии от var_export использует синтаксис массивов PHP 5.4+ и поддерживает форматирование (табуляция, переносы строк и т.п.).
Как использовать?
PHP:
/**
* Возвращает интерпретируемое строковое представление массива.
* @param array $array Массив.
* @param bool $beautify Форматировать ли возвращаемую строку.
* @return string Интерпретируемое строковое представление массива.
*/
function array_export(array $array, bool $beautify, int $iteration = 0): string
{
if(empty($array))
return "[]";
$tab = $beautify ? str_repeat("\t", $iteration) : "";
$result = $beautify ? "[\n" : "[";
$count = count($array);
foreach ($array as $key => $val)
{
$count--;
$result .= $beautify ? ($tab . "\t") : "";
$result .= to_array_element($key);
$result .= $beautify ? " => " : "=>";
if(is_array($val))
$result .= array_export($val, $beautify, $iteration + 1);
else
$result .= to_array_element($val);
$result .= ($count > 0) ? "," : "";
$result .= $beautify ? "\n" : "";
}
return $beautify ? $result . $tab . "]" : $result . "]";
}
function to_array_element($value) : string
{
if(is_int($value) or is_float($value))
return $value;
if(is_bool($value))
return var_export($value, true);
if(is_null($value))
return 'null';
if(is_object($value))
return get_class($value) . "::class";
return '"' . ((string) $value) . '"';
}
Кормим массив, и получаем его строковое представление. В отличии от var_export использует синтаксис массивов PHP 5.4+ и поддерживает форматирование (табуляция, переносы строк и т.п.).
Как использовать?
PHP:
$config = [
'config' => [
'float' => 1.2,
'string' => 'str',
'bool' => true,
'null' => null,
'object' => new \mmopane\validate\Validator(),
]
];
file_put_contents("config.php", "<?php \n\nreturn " . array_export($config, true) . ";");
/* Содержимое файла config.php */
return [
"config" => [
"float" => 1.2,
"string" => "str",
"bool" => true,
"null" => null,
"object" => mmopane\validate\Validator::class
]
];