在PHP中,如何将String变量中的Array(字典)转换为Array结构?

时间:2014-03-23 11:30:07

标签: php arrays string

我在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 . ';');

2 个答案:

答案 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功能无法完成任务时,您可能会将其视为最后的手段。