У меня есть строка:
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', ....);
Пожалуйста помоги.
Попробуйте это (с плохими именами рабочих переменных, но с их работой) –
<?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);
Codepad Link – http://codepad.org/EqysY1CZ
Самый быстрый и простой, но ДЕЙСТВИТЕЛЬНО ИНСЕКУРС
$str = "array('3'=>'www.tension.com','1'=>'www.seomeuo.com','requestedBy'=>'1')"; eval("\$array = $str;");
Вы никогда не должны использовать этот подход, есть еще один способ сделать это: serialize()
и unserialize()
попробуйте этот код и используйте метод 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); ?>
Я хотел практиковать регулярное выражение. Одна большая проблема заключается в том, что ваша строка имеет как ','
и ', '
качестве разделителей, поэтому вам нужно это исправить.
<?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
Грязная логика здесь 🙂
<?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); ?>
Вам нужно использовать функцию explode в PHP.
refer-> http://cz1.php.net/explode