如何用正确的行和空格将PHP数组保存到PHP文件中


How can I save a PHP array to a PHP file with the right lines and spaces?

我有下面的数组,我想把它保存到一个PHP文件中,比如myfile.php,但我想在一个数组和另一个数组之间有合适的空格。我需要我的文件看起来像这个数组:

$array = [
    "one" => [
        "key1" => "value1",
        "key2" => "value2",
        "key3" => [
            "key1" => "value3",
            "key2" => "value4",
            "key3" => [
                "value5",
                "value6",
                "value7",
                "value8",
                "value9"
            ],
            "key4" => "value10",
            "key5" => "value11"
        ],
        "key4" => "value12",
        "key5" => "value13"
    ]
];

很难让完全像这样,但您可能正在寻找var_export。。

<?php
$arr=["one" => [
    "key1" => "value1",
    "key2" => "value2",
    "key3" => [
        "key1" => "value3",
        "key2" => "value4",
        "key3" => [
            "key1" => "value5",
            "key2" => "value6",
            "key3" => "value7",
            "key4" => "value8",
            "key5" => "value9"
        ],
        "key4" => "value10",
        "key5" => "value11"
    ],
    "key4" => "value12",
    "key5" => "value13"
]];
file_put_contents('myfile.php', var_export($arr, true));

好的,我已经更新了!这是一个完美的方式。

function escapeString($str) {
    $escape = array(
        "'r" => ''r',
        "'n" => ''n',
        "'t" => ''t',
        "'" => "'''",
        '"' => ''"',
        '''' => ''''''
    );
    return strtr($str, $escape);
}

function arrayToString($array, $space=2, $level=0) {
    $var = "";
    $SLINE = "'t";
    $DLINE = "'n";
    if (is_array($array)) {
        $length = sizeof($array);
        $last = 0;
        foreach($array as $key => $x) {
            $newKey = '"' . $key . '"';
            if (is_array($x)) {
                $level++;
                $s = "";
                $ss = "";
                for ($j=0; $j < $level; $j++) {
                    if ($j>0)
                        $s.=$SLINE;
                        $ss.=$SLINE;
                    }
                if ($length>1 && $last!=$length - 1)
                    $coma = ',' . $DLINE;
                else
                    $coma = $DLINE;
                $var.=$s . "$newKey => [".$DLINE;
                $var.=arrayToString($x, $space, $level);
                $var.=$s . "]$coma";
                $level--;
            }
            else {
                $s = "";
                $ss = "";
                for ($j=0; $j < $level; $j++) {
                    if ($j > 0)
                        $s.=$SLINE;
                        $ss.=$SLINE;
                    }
                switch(gettype($x)) {
                    case 'boolean':
                        $value = $x ? 'true' : 'false';
                        break;
                    case 'integer':
                    case 'double':
                        $value = $x;
                        break;
                    case 'string':
                        $value = '"'.escapeString($x).'"';
                        break;
                    case 'NULL':
                        $value = 'null';
                        break;
                }
                if ($length>1 && $last!=$length - 1)
                    $coma = ',' . $DLINE;
                else
                    $coma = $DLINE;
                if (is_numeric($key))
                    $newKey = "";
                else
                    $newKey.=" => ";
                $var.=$ss . "$newKey$value$coma";
            }
            $last++;
        }
        return $var;
    }
}
$array = [
    "one" => [
        "key1" => "value1",
        "key2" => "value2",
        "key3" => [
            "key1" => "value3",
            "key2" => "value4",
            "key3" => [
                "value5",
                "value6",
                "key1" => [
                    "key1" => "value3",
                    "key2" => "value4",
                    "key3" => [
                        "value5",
                        "value6",
                        "value7",
                        "value8",
                        "value9"
                    ],
                    "key4" => "value10",
                    "key5" => "value11"
                ],
                "value8",
                "value9"
            ],
            "key4" => "value10",
            "key5" => "value11"
        ],
        "key4" => "value12",
        "key5" => "value13"
    ]
];
$DLINE = "'n";
$content = '<?php'.$DLINE.$DLINE;
$content .= arrayToString($array, $space=2);
$content .= $DLINE.'?>';
// refresh page and see your file
file_put_contents('yourFileName.php', $content);