我想将形式为{1} 1 {2} 3 {3} 6的php字符串转换为php数组

时间:2015-12-29 05:37:38

标签: php arrays

我在php中得到了这个{1}1{2}3{3}6字符串的格式,我希望将大括号中的数字作为数组的索引,并且存储在索引上的值将是大括号之后的值。这样我就可以轻松地应用foreach来输入数据库中的值。

输出数组应该是:

array([1]=>1,[2]=>3,[3]=>6)

3 个答案:

答案 0 :(得分:4)

$result = [];
$data = '{1}1{2}3{3}6';
preg_match_all('/\{(\d+)\}\s*(\d+)/', $data, $m);
foreach ($m[1] as $i => $key) {
    $result[$key] = $m[2][$i];
}

答案 1 :(得分:0)

您可以使用正则表达式"正则表达式"如下:

<?php
$string="{1}1{2}3{3}6";

//Define the regex
$regex = "/{([a-zA-Z0-9_]*)}\s*([a-zA-Z0-9_]*)/";
preg_match_all($regex, $string, $matches);

//Temporary array to store the data
$arry = array();
foreach($matches[1] as $key => $value){
        $arry[$value] = $matches[2][$key];
}
var_dump($arry);
?>

[概念证明]

  

array(3){

     

[1] =&GT; string(1)&#34; 1&#34;
  [2] =&GT; string(1)&#34; 3&#34;
  [3] =&GT;字符串(1)&#34; 6&#34;

     

}

答案 2 :(得分:0)

尝试:

$str = '{1}1{2}3{3}6';
$arr = explode("}", substr(str_replace("{", "}", $str), (strlen($str)-1)*-1));
$arr = array_map(function ($v){ global $arr; return $arr[$v+1]; }, array_flip(array_intersect_key($arr, array_flip(array_filter(array_keys($arr), function ($v){ return !($v & 1); })))));