我在php中得到了这个{1}1{2}3{3}6
字符串的格式,我希望将大括号中的数字作为数组的索引,并且存储在索引上的值将是大括号之后的值。这样我就可以轻松地应用foreach
来输入数据库中的值。
输出数组应该是:
array([1]=>1,[2]=>3,[3]=>6)
答案 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); })))));