Php 如何将类似数组的字符串转换为关联数组?

Php 如何将类似数组的字符串转换为关联数组?,php,arrays,string,parsing,Php,Arrays,String,Parsing,我想在字符串值中使用数组语法,然后将该变量添加到array()中 比如: 所需的任务应为: $form_data = array('user_type'=>'test','username'=>'test'); 但这不是我得到的。我会使用JSON转换。这应该起作用: // create a JSON string like: $value = '{ "user_type":"test", "username":"test" }'; $form_data = json_decode(

我想在字符串值中使用数组语法,然后将该变量添加到
array()

比如:

所需的任务应为:

$form_data = array('user_type'=>'test','username'=>'test');

但这不是我得到的。

我会使用
JSON
转换。这应该起作用:

// create a JSON string like:
$value = '{ "user_type":"test", "username":"test" }';
$form_data = json_decode($value, true);
// test it
var_dump($form_data);

这是一个使用
parse_str()
的方法,这是一个直观的、无循环的单行程序。对我来说,这似乎是最好的选择——我的意思是这正是函数的目的!与此任务的任何健壮解决方案一样,它确实需要仔细准备

代码:()

这将很好地为您服务,除非您的“键”或“值”包含分隔子字符串

  • 首先,删除前导单引号和尾随单引号
  • 然后
    str\u replace()
    将修改分隔符:
    • =>”
      变成
      =
    • ,“
      变成
      &
  • 然后
    stripslashes()
    处理任何转义斜杠
  • 最后,
    parse_str()
由于
(string)
前缀和分隔逗号周围的可选间距,我的方法无法在问题的重复链接上立即使用。我的方法特别适合于这种严格结构化、一维、关联、类似数组的字符串

使用带有精心设计的模式的
preg_match()
的方法可能值得信赖,但regex绝对比字符串函数慢,而且在未经培训的人看来可能有点复杂

使用
eval()
的方法也是可行的,但只有在其他方法都不能很好地完成工作时,该函数才应作为“计划Z”使用,并且需要对值进行严格验证/过滤,并带有极大的偏见

使用
explode()
foreach()
循环的方法将需要更大的代码块,我认为这将是一个较慢的选择(但可能不是)。在任何单个字符上爆炸都会有更高的数据损坏风险;与所有解决方案一样,特别注意保持数据的完整性至关重要


verjas的方法似乎是一种合乎逻辑的方法,但当用双引号替换单引号时,包含引号的键和值可能会损坏。我将把准备代码留给verjas,以容纳单引号和双引号。

上述重复链接的可能重复是合理的,但我要说的是,这是一个非常微小的不同雪花,因为它在分隔逗号周围没有可选的空格。虽然我支持重复投票/标志,但我选择发布一个专为该问题样本输入的更可预测格式而设计的答案。请包括答案中省略的(编程)“准备魔术”。
// create a JSON string like:
$value = '{ "user_type":"test", "username":"test" }';
$form_data = json_decode($value, true);
// test it
var_dump($form_data);
$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);