我在Stack中寻找一些将字符串变量转换为数组的解决方案。 String变量的内容为:
$myvar = 'array("a" => array("b1" => 1, "b2" => "something"), "c" => array("d1" => 1))';
我想转换为:
$myarray = array(
"a" => array (
"b1" => 1,
"b2" => "something"
),
"c" => array("d1" => 1)
);
我之后使用json_decode
将我的巨大字符串转换为json,我也使用了内爆...
使用eval,我收到下一个错误:
Parse error: syntax error, unexpected '<' in tabletocreate.php(51) : eval()'d code on line 1
我使用了print_r($ myvar);
这个想法是我在一个文件中有一个模型model.php它只是一个字典,我在一个字符串中读取这个文件然后再转换一个数组,我这样做是因为我需要从中生成一个新的数据库这个数据,我有每个目录的模型,我需要产品,提供,...每个模型都会有所不同,但是我使用相同的数组结构,我在示例中写道
解
faintsignal解决了我的案例中的解决方案:eval("\$myarray = " . $myvar . ';');
答案 0 :(得分:2)
使用eval()http://www.php.net/manual/en/function.eval.php
$myarray = eval($myvar)
但如果您从脚本外部获取$ myvar,请不要这样做。此外,还有更好的方法可以在PHP中序列化和反序列化数据。例如,请参阅http://www.php.net/manual/en/function.serialize.php
如果您直接阅读.php文件,则必须处理<?php
和?>
。您可以在将文件传递给eval()
之前对其进行预解析。如果您的文件简单如下:
<?php (php_declarations_and_stuff ?>
您只需删除<?php
和?>
以及eval()
文件。
另一个选项可能就是对文件使用include
。见http://www.php.net/manual/en/function.include.php。在这种情况下,include
将评估全局范围内的文件。另请注意,如果您所包含的文件使用return
,则可以直接检索此值(请参阅包含参考中的示例#5):
return.php
<?php return 'Ok'; ?>
myfile.php
$val = include('return.php');
print $val;
将打印&#34;确定&#34;。
答案 1 :(得分:1)
eval()
将完成你所需要的,但正如另一张海报在他的回答中提出的那样,你必须非常谨慎地使用这个功能。
$myvar = 'array("a" => array("b1" => 1, "b2" => "something"), "c" => array("d1" => 1))';
eval("\$myarray = " . $myvar . ';');
var_dump($myarray);
输出
array(2) {
["a"]=>
array(2) {
["b1"]=>
int(1)
["b2"]=>
string(9) "something"
}
["c"]=>
array(1) {
["d1"]=>
int(1)
}
}
有人评论说eval
已被弃用,但我找不到任何支持此信息的信息。但是,它的使用是气馁,因此当现有的PHP功能无法完成任务时,您可能会将其视为最后的手段。