我有这个问题:
一个字符串,例如:
$stringa = "array('name' => 'John')"
我想获取:array('name' => 'John')
用于我的代码,如数组
有什么帮助吗?谢谢
使用评估的注意事项...
注意 eval() 语言结构非常危险,因为它 允许执行任意 PHP 代码。因此,不鼓励使用它。 如果您已经仔细验证了除了 使用此构造,特别注意不要传递任何用户 在没有事先正确验证的情况下将数据提供给其中。
<?php
$stringa = "array('name' => 'John')";
$code = "'$a = " . $stringa . ";";
eval($code);
print_r($a);
Gouda Elalfy 的想法是正确的,但他的解决方案只是将整个字符串变成一个数组值。
首先,我们需要删除多余的数据类型信息:
$slimString = substr($stringa,6);
$slimString = rtrim($slimString,")");
现在这给了我们一串:
'name' => 'John'
那么字符串中的Keys
和values
需要拆分,所以在=>
中断如下:
对于字符串中的多个值:此方法还包括单引号以限制捕获标点符号逗号(请注意,此方法因trim
不如我希望的那样有效而需要str_replace引号而搞砸了)。
$slimString = str_replace("', '","=>", $slimString);
然后
$slimStringParts = explode("=>", $slimString);
这将在=>
(或,
)上拆分,以便可以生成数组内容的多个值。
然后循环遍历每个数组片段,基于偶数(和零)是Keys
,ODD 数是values
,也删除每个数组的引号,
我最初使用的是trim
但由于某种原因,修剪没有像我预期的那样完全工作。 所以反而恢复到st_replace
foreach($slimStringParts as $key => $part){
if(($key%2) == 0){
$part = str_replace("'","",$part);
$arrayOutput[$part] = str_replace("'","",$slimStringParts[$key+1]);
}
}
unset($key, $part);
foreach 仅作用于上面引用的偶数值和零值,它们以原始键值 + 1 作为其内容。trim
/str_replace
删除了单引号,看起来不整洁,但这适用于一个或多个数组值的字符串
最后是输出:
print_r($arrayOutput);
使用原件进行测试:
输入 : "array('name' => 'John')"
输出 : 数组 ( [名称] => 约翰 )
使用多值数组字符串进行测试:
输入 : "数组('名字
' => '约翰', '姓' => '詹姆斯', '骑' => '马')"输出 : 数组 ( [名称] => 约翰 [姓氏] => 詹姆斯 [骑 ] =>匹马 )
完整代码:
$stringa = "array('name' => 'John')";
$stringb = "array('name' => 'John', 'surname' => 'James', 'Ride' => 'horse')";
$slimString = substr($stringb,6);
$slimString = rtrim($slimString,")");
$slimString = str_replace("', '","=>", $slimString);
$slimStringParts = explode("=>", $slimString);
foreach($slimStringParts as $key => $part){
if(($key%2) == 0){
$part = str_replace("'","",$part);
$arrayOutput[$part] = str_replace("'","",$slimStringParts[$key+1]);
}
}
unset($key,$part);
print_r($arrayOutput);
exit;
请注意,我trim()
的想法是我想要的,但这似乎受到我的页面字符编码的影响:-(
eval()
函数。
但它没有被推荐。
http://php.net/manual/en/function.eval.php
Eval不安全,请尝试将其用作临时方法并找到更好的解决方案。
例:
$stringa="array('name' => 'John');";
$array = eval($stringa);