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

时间:2017-08-05 20:38:26

标签: php arrays string parsing

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

像:

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

所需的分配应该是:

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

但这不是我得到的。

2 个答案:

答案 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以容纳单引号和双引号。