功能描述:
已有一个带占位符的消息模块和对应的消息实例,需要提取实例中的变量值,由于字符串可能包含中文、英文、数字等,所以关于字符串的操作采用mb类的函数。
//消息模板
$str = '尊敬的客户,您兑换的#code61#商品已在#code2#消费成功,感谢您的使用。';
//消息实例
$str2 = '尊敬的客户,您兑换的优惠券商品已在有家门店消费成功,感谢您的使用。';
//已知占位符为#,匹配出模板中的变量
preg_match_all('/#.{5,7}#/', $str, $result);
foreach ($result as $re){
$str = str_replace($re, '', $str);
}
$len = mb_strlen($str);
$arr = array();
$params = '';
$keywork = $result[0];
while ($len>0){
//提取剩余模板的第一个字
$word = mb_substr($str, 0, 1);
//如果剩余实例中的第一个字相同则同时移除,不同则存为变量对应值
if (strpos($str2, $word) === 0){
$str = mb_substr($str, 1, mb_strlen($str)-1);
$str2 = mb_substr($str2, 1, mb_strlen($str2));
$len = mb_strlen($str);
if (strlen($params) > 0){
$arr[trim($keywork[0], '#')] = $params;
$params = '';
array_shift($keywork);
}
}else{
$preg = mb_substr($str2, 0, 1);
$params .= $preg;
$str2 = mb_substr($str2, 1, mb_strlen($str2));
}
}
echo json_encode($arr);
exit;