我想在字符串值中使用数组语法,然后在array()
中添加该变量。
像:
$value= "'user_type'=>'test','username'=>'test'";
$form_data = array($value);
所需的分配应该是:
$form_data = array('user_type'=>'test','username'=>'test');
但这不是我得到的。
答案 0 :(得分:1)
我会使用JSON
转换。这应该有效:
// create a JSON string like:
$value = '{ "user_type":"test", "username":"test" }';
$form_data = json_decode($value, true);
// test it
var_dump($form_data);
答案 1 :(得分:0)
这是一种使用parse_str()
的方法 - 这是一种直观,无循环的单行程序。对我来说这似乎是最好的选择 - 我的意思是这就是功能的目的!像任何强大的解决方案一样,它需要仔细准备。
代码:(Demo)
$value= "'user_type'=>'test1','username'=>'test2','monkey\'s wrench'=>'that\'s trouble'";
parse_str(stripslashes(str_replace(["'=>'","','"],['=','&'],trim($value,"'"))),$form_data); // second param is output variable
var_export($form_data);
这将很好地为您服务,除非您的“键”或“值”包含分隔子串。
str_replace()
将修改分隔符:
'=>'
变为=
','
变为&
stripslashes()
处理任何转义斜杠。parse_str()
发挥作用直接产生关联数组。由于
(string)
前缀和分隔逗号周围的可选间距,我的方法在问题的重复链接上不会开箱即用。我的方法特别适合这种严格结构的,一维的,关联的,类似数组的字符串。
使用preg_match()
精心设计的模式的方法可能值得信赖,但正则表达式明显比字符串函数慢,并且对于未经训练的眼睛可能看起来有些复杂。
使用eval()
的方法也是可行的,但是当所有其他方法都无法正常工作时,该函数应仅用作“计划Z”并且需要对极值进行大量验证/过滤偏见。
使用explode()
和foreach()
循环的方法将需要更大的代码块,我认为它将是一个更慢的替代方案(但可能不是)。对任何单个字符进行爆炸将导致更大的数据损失风险;与所有解决方案一样,特别注意保留数据的内部性是至关重要的。
verjas'方法似乎是一种逻辑方法,但是当用双引号替换单引号时,包含引号的键和值可能会受到损坏。我将准备代码留给verjas以容纳单引号和双引号。