diff --git a/.gitignore b/.gitignore index b03345b3..7629e8e8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ logs/* .buildpath .project .settings/ +.test/ *.diff *~ .well-known diff --git a/lib/Froxlor/PhpHelper.php b/lib/Froxlor/PhpHelper.php index 7cce512d..441c8c16 100644 --- a/lib/Froxlor/PhpHelper.php +++ b/lib/Froxlor/PhpHelper.php @@ -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(" $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; + } }