我有一个数组:
$myArray = array('key1'=>'value1', 'key2'=>'value2');
我将其保存在一个变量中:
$fileContents = var_dump($myArray);
如何将变量转换为常规数组以便后续使用?echo $fileContents[0]; //output: value1
echo $fileContents[1]; //output: value2
我有一个数组:
$myArray = array('key1'=>'value1', 'key2'=>'value2');
我将其保存在一个变量中:
$fileContents = var_dump($myArray);
如何将变量转换为常规数组以便后续使用?echo $fileContents[0]; //output: value1
echo $fileContents[1]; //output: value2
我认为你可能想要了解serialize
和unserialize
。
$myArray = array('key1'=>'value1', 'key2'=>'value2');
$serialized = serialize($myArray);
$myNewArray = unserialize($serialized);
print_r($myNewArray); // Array ( [key1] => value1 [key2] => value2 )
“serialize”可能是正确的答案,但我更喜欢使用JSON - 这样可以进行人工编辑数据...
$myArray = array('key1'=>'value1', 'key2'=>'value2');
$serialized = json_encode($myArray);
$myNewArray = json_decode($serialized, true);
print_r($myNewArray); // Array ( [key1] => value1 [key2] => value2 )
$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
$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);
输出
数组([0] => 10 [1] => 1 [2] => 2 [3] => 3 [4] => 1 [5] => '4' [6] => '5' [7] => '6'] [8] => 3)
那么eval呢?你应该使用var_export,并将返回变量设置为true,而不是使用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
我写了这个函数(只是为了好玩:),而且因为我懒得要死,所以想要一种将字符串中的数组转换为有效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
命令,此功能将无法工作。
最后一件事,如果您发现任何错误或缺陷,请在评论中让我知道,以便我可以修复并学习。
希望这有所帮助。
print_r
而不是var_dump
,则可以使用print_r反转函数。 - machineaddict