ArrayDump::arr2string()   B
last analyzed

Complexity

Conditions 7
Paths 7

Size

Total Lines 23
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 18
dl 0
loc 23
rs 8.8333
c 0
b 0
f 0
cc 7
nc 7
nop 2
1
<?php
2
namespace suda\framework\arrayobject;
3
4
use function file_put_contents;
5
6
/**
7
 * 数组导出
8
 */
9
class ArrayDump
10
{
11
    /**
12
     * 将数组美化导出成PHP代码
13
     *
14
     * @param string $name 导出的数组名
15
     * @param array $array 导出的数组
16
     * @return string 导出的PHP代码
17
     */
18
    public static function dump(string $name, array $array):string
19
    {
20
        $name = '$'.ltrim($name, '$');
21
        $exstr = '<?php'.PHP_EOL.$name.'=array();'.PHP_EOL;
22
        $exstr .= self::arr2string($name, $array);
23
        $exstr .= 'return '.$name.';';
24
        return $exstr;
25
    }
26
27
    /**
28
     * 将数组导出到PHP文件
29
     *
30
     * @param string $path
31
     * @param string $name
32
     * @param array $array
33
     * @return int
34
     */
35
    public static function export(string $path, string $name, array $array)
36
    {
37
        return file_put_contents($path, static::dump($name, $array));
38
    }
39
40
    protected static function arr2string($arrname, $array)
41
    {
42
        $exstr = '';
43
        foreach ($array as $key => $value) {
44
            $line = '';
45
            $current = $arrname."['".addslashes($key)."']";
46
            if (is_array($value)) {
47
                $line .= self::parserArraySub($current, $value);
48
            } else {
49
                $line = $current;
50
                if (is_string($value)) {
51
                    $line .= "='".addslashes($value).'\';'.PHP_EOL;
52
                } elseif (is_bool($value)) {
53
                    $line .= '='.($value ? 'true' : 'false').';'.PHP_EOL;
54
                } elseif (null === $value) {
55
                    $line .= '=null;'.PHP_EOL;
56
                } else {
57
                    $line .= '='.$value.';'.PHP_EOL;
58
                }
59
            }
60
            $exstr .= $line;
61
        }
62
        return $exstr;
63
    }
64
65
    protected static function parserArraySub(string $parent, array $array)
66
    {
67
        $line = '';
68
        foreach ($array as $key => $value) {
69
            if (is_array($value)) {
70
                $subpar = $parent."['".$key."']";
71
                $line .= self::parserArraySub($subpar, $value);
72
            } else {
73
                $line .= $parent."['".$key."']";
74
                if (is_string($value)) {
75
                    $line .= "='".addslashes($value).'\';'.PHP_EOL;
76
                } elseif (is_bool($value)) {
77
                    $line .= '='.($value ? 'true' : 'false').';'.PHP_EOL;
78
                } elseif (null === $value) {
79
                    $line .= '=null;'.PHP_EOL;
80
                } else {
81
                    $line .= '='.$value.';'.PHP_EOL;
82
                }
83
            }
84
        }
85
        return $line;
86
    }
87
}
88