将字符串转换为关联数组PHP

时间:2013-12-13 15:15:41

标签: php arrays string associative

我有一个字符串:

string(133) "'status' => '-1','level1' => '1', 'level2' => '1', 'level9' => '1', 'level10' => '1', 'start' => '2013-12-13', 'stop' => '2013-12-13'"

我如何创建关联数组? 结果必须是:

array('status' => '-1', 'level1' => '1', ....);

请帮忙。

6 个答案:

答案 0 :(得分:3)

最快,最简单但真正的不安全

$str = "array('3'=>'www.tension.com','1'=>'www.seomeuo.com','requestedBy'=>'1')";
eval("\$array = $str;");

你永远不应该使用这种方法,还有另外一种方法:serialize()unserialize()

答案 1 :(得分:2)

尝试此代码并使用 explode() foreach 循环来获取输出

<?php


   $string="'status' => '-1','level1' => '1', 'level2' => '1', 'level9' => '1', 'level10' => '1', 'start' => '2013-12-13', 'stop' => '2013-12-13'";

   $a=explode("=>",$string);
   $c=array();
   $i=0;
 foreach($a as $k=>$v){

   if($i%2==0){
   $b[]=$v;
   }else{
   $c[]=$v;
   }
   $i++;
   }
  $d=array_combine($b,$c);
 print_r($d);

?>

答案 2 :(得分:2)

我想练习正则表达式。一个大问题是,您的字符串同时包含','', '作为分隔符,因此您需要修复它。

<?php
$var = "'status' => '-1','level1' => '1', 'level2' => '1', 'level9' => '1', 'level10' => '1', 'start' => '2013-12-13', 'stop' => '2013-12-13'";
$var = str_replace(', ', ',', $var);
$rows = explode(',', $var);
$array = [];
foreach($rows AS $row){
    preg_match("/^'(.+)' \=\> '(.+)'\$/", $row, $matches);
    $array[$matches[1]] = $matches[2];
}
var_dump($array);
?>

示例:http://ideone.com/4oad4t

答案 3 :(得分:2)

尝试这个(使用错误的工作变量名称,但它的工作原理) -

<?php

$str = "'status' => '-1','level1' => '1', 'level2' => '1', 'level9' => '1', 'level10' => '1', 'start' => '2013-12-13', 'stop' => '2013-12-13'";

$mstr = explode(",",$str);
$a = array();
foreach($mstr as $nstr )
{
    $narr = explode("=>",$nstr);
$narr[0] = str_replace("\x98","",$narr[0]);
$ytr[1] = $narr[1];
$a[$narr[0]] = $ytr[1];
}
print_r($a);

键盘链接 - http://codepad.org/EqysY1CZ

答案 4 :(得分:2)

这里有肮脏的逻辑:)

<?php 
$str="'status' => '-1','level1' => '1', 'level2' => '1', 'level9' => '1', 'level10' => '1', 'start' => '2013-12-13', 'stop' => '2013-12-13'";
echo $str='$arr='.'array('.$str.');';
eval($str);
echo "<pre>";
print_r($arr);
?>

答案 5 :(得分:-3)

您需要在PHP中使用explode功能。
refer-&GT; http://cz1.php.net/explode