将PHP数组字符串转换为数组

时间:2009-03-26 04:48:43

标签: php arrays serialization

我有一个数组:

$myArray = array('key1'=>'value1', 'key2'=>'value2');

我将其保存为变量:

$fileContents = var_dump($myArray);

如何将变量转换回常规数组?

echo $fileContents[0]; //output: value1
echo $fileContents[1]; //output: value2

6 个答案:

答案 0 :(得分:20)

我想你可能想看看serializeunserialize

$myArray = array('key1'=>'value1', 'key2'=>'value2');
$serialized = serialize($myArray);
$myNewArray = unserialize($serialized);
print_r($myNewArray); // Array ( [key1] => value1 [key2] => value2 ) 

答案 1 :(得分:19)

序列化可能是正确的答案 - 但我更喜欢使用JSON - 人们可以通过这种方式编辑数据......

$myArray = array('key1'=>'value1', 'key2'=>'value2');
$serialized = json_encode($myArray);
$myNewArray = json_decode($serialized);
print_r($myNewArray); // Array ( [key1] => value1 [key2] => value2 )

答案 2 :(得分:7)

尝试使用var_export生成有效的PHP语法,将其写入文件,然后“包含”该文件:

$myArray = array('key1'=>'value1', 'key2'=>'value2');
$fileContents = '<?php $myArray = '.var_export($myArray, true).'; ?>';

// ... after writing $fileContents to 'myFile.php'

include 'myFile.php';
echo $myArray['key1']; // Output: value1

答案 3 :(得分:2)

评估怎么样?您还应该将var_export与return变量一起使用,而不是var_dump。

$myArray = array('key1'=>'value1', 'key2'=>'value2');
$fileContents = var_export($myArray, true);
eval("\$fileContentsArr = $fileContents;");
echo $fileContentsArr['key1']; //output: value1
echo $fileContentsArr['key2']; //output: value2

答案 4 :(得分:1)

$array = ['10', "[1,2,3]", "[1,['4','5','6'],3]"];

function flat($array, &$return) {
    if (is_array($array)) {
        array_walk_recursive($array, function($a) use (&$return) { flat($a, $return); });
    } else if (is_string($array) && stripos($array, '[') !== false) {
        $array = explode(',', trim($array, "[]"));
        flat($array, $return);
    } else {
        $return[] = $array;
    }
}

$return = array();

flat($array, $return);

print_r($return);

输出

Array ( [0] => 10 [1] => 1 [2] => 2 [3] => 3 [4] => 1 [5] => '4' [6] => '5' [7] => '6'] [8] => 3 )

答案 5 :(得分:1)

免责声明

我写了这个函数(很有趣:),由于我是懒惰的AF,我想用一种简短的方法将字符串中的数组转换为有效的PHP数组。 我不确定此代码是否可以exec安全地用于生产,而姐妹俩总是吓我一跳。

$myArray = 'array("key1"=>"value1", "key2"=>"value2")';

function str_array_to_php(string $str_array) {
    // No new line characters and no single quotes are allowed
    $valid_str = str_replace(['\n', '\''], ['', '"'], $str_array);
    exec("php -r '
    if (is_array($valid_str)) {
        function stap(\$arr = $valid_str) {
            foreach(\$arr as \$v) {
                if(is_array(\$v)){
                    stap(\$v);
                }
                else {
                    echo \$v,PHP_EOL;
                }
            }
        }
        stap();
    }'2>&1", $out);
        return $out;
}

print_r(str_array_to_php($myArray));

输出:

Array ( [0] => value1 [1] => value2 ) 

如您所见,它将$myArray转换为有效的PHP数组,然后对其进行数字索引,如果它是多维的,则将其转换为单个。

  

请小心:

     

1- 永远不要在双引号中传递数组,因为这将允许对空字节字符(\ 0)进行求值。

例如:

$myArray = "array(\"key1\"=>\"value\n\0 ggg\", \"key2\"=>\"value2\")"
//Output: Warning: exec(): NULL byte detected. Possible attack
  

2-如果禁用exec(大多数情况为),则此功能将不起作用

     

3-如果未设置php命令,此功能将不起作用

最后一件事,如果您发现任何错误或缺陷,请在评论中让我知道,以便我进行修复和学习。

希望这会有所帮助。