add array to string/file helper

This commit is contained in:
envoyr
2022-05-01 13:47:50 +02:00
parent 98c7c81fb8
commit b9bb689796
2 changed files with 73 additions and 0 deletions

View File

@@ -477,4 +477,76 @@ class PhpHelper
}
return strcasecmp($a[self::$sort_key], $b[self::$sort_key]);
}
/**
* Generate php file from array.
*
* @param array $array
* @param bool $asReturn
* @return string
*/
public static function parseArrayToPhpFile(array $array, string $comment = null, $asReturn = false): string
{
$str = sprintf("<?php\n// %s\n\n", $comment ?? 'autogenerated froxlor file');
if ($asReturn) {
return $str . sprintf("return %s;\n\n", rtrim(self::parseArrayToString($array), "\n,"));
}
foreach ($array as $var => $arr) {
$str .= sprintf("\$%s = %s;\n\n", $var, rtrim(self::parseArrayToString($arr), "\n,"));
}
return $str;
}
/**
* Parse array to array string.
*
* @param $array
* @param $key
* @param int $depth
* @return string
*/
public static function parseArrayToString($array, $key = null, int $depth = 1): string
{
$str = '';
if (is_array($array)) {
if (!is_null($key)) {
$str .= self::tabPrefix(($depth-1), "'{$key}' => [\n");
} else {
$str .= self::tabPrefix(($depth-1), "[\n");
}
foreach ($array as $key => $value) {
if (isset($key) && !is_array($value)) {
if (is_bool($value)) {
$str .= self::tabPrefix($depth, sprintf("'%s' => %s,\n", $key, $value ? 'true' : 'false'));
} elseif (is_int($value)) {
$str .= self::tabPrefix($depth, "'{$key}' => $value,\n");
} else {
$str .= self::tabPrefix($depth, "'{$key}' => '{$value}',\n");
}
} elseif (is_array($value)) {
$str .= self::parseArrayToString($value, $key, ($depth + 1));
}
}
$str .= self::tabPrefix(($depth-1), "],\n");
}
return $str;
}
/**
* Apply tabs with given depth to string.
*
* @param int $depth
* @param string $str
* @return string
*/
private static function tabPrefix(int $depth, string $str = ''): string
{
$tab = '';
for ($i = 1; $i <= $depth; $i++) {
$tab .= "\t";
}
return $tab . $str;
}
}