我需要将多个数据包拆分为单个块
$packets="
*TS01,868323025167807,205004181116,GPS:3;S33.792541;E151.066264;58;347;1.46,STT:202;0,MGR:1555391,ADC:0;13.84;1;38.89;2;4.14,EVT:1#*TS01,868323025167807,205104181116,GPS:3;S33.786623;E151.060349;66;309;1.10,STT:202;0,MGR:1556426,ADC:0;13.78;1;38.70;2;4.14,EVT:1#*TS01,868323025167807,205204181116,GPS:3;S33.779947;E151.052654;47;313;1.10,STT:202;0,MGR:1557577,ADC:0;13.65;1;38.70;2;4.14,EVT:1#*TS01,868323025167807,205304181116,GPS:3;S33.776746;E151.051546;52;346;1.09,STT:202;0,MGR:1557980,ADC:0;13.85;1;38.14;2;4.14,EVT:1#*TS01,868323025167807,205404181116,GPS:3;S33.768219;E151.048295;63;338;1.08,STT:202;0,MGR:1559134,ADC:0;13.62;1;37.95;2;4.14,EVT:1#*TS01,868323025167807,205504181116,GPS:3;S33.763735;E151.047204;0;0;1.08,STT:202;0,MGR:1559699,ADC:0;12.84;1;37.95;2;4.14,EVT:1#*TS01,868323025167807,205518181116,GPS:3;S33.763707;E151.047218;0;0;1.07,STT:2;0,MGR:1559699,ADC:0;12.84;1;37.95;2;4.14,EVT:F0;200#";
一个有效的数据包如下所示
*TS01,868323025167807,205004181116,GPS:3;S33.792541;E151.066264;58;347;1.46,STT:202;0,MGR:1555391,ADC:0;13.84;1;38.89;2;4.14,EVT:1#
表示每个数据包以*开头,以#
结尾我做了以下
$no_of_packets=substr_count($packets, '*');
if($no_of_packets>1){
//explode with #
$packets=explode("#",$msg)
}
我得到如下数组
[0] => *TS01,868323025167807,205004181116,GPS:3;S33.792541;E151.066264;58;347;1.46,STT:202;0,MGR:1555391,ADC:0;13.84;1;38.89;2;4.14,EVT:1
[1] => *TS01,868323025167807,205104181116,GPS:3;S33.786623;E151.060349;66;309;1.10,STT:202;0,MGR:1556426,ADC:0;13.78;1;38.70;2;4.14,EVT:1
[2] => *TS01,868323025167807,205204181116,GPS:3;S33.779947;E151.052654;47;313;1.10,STT:202;0,MGR:1557577,ADC:0;13.65;1;38.70;2;4.14,EVT:1
[3] => *TS01,868323025167807,205304181116,GPS:3;S33.776746;E151.051546;52;346;1.09,STT:202;0,MGR:1557980,ADC:0;13.85;1;38.14;2;4.14,EVT:1
[4] => *TS01,868323025167807,205404181116,GPS:3;S33.768219;E151.048295;63;338;1.08,STT:202;0,MGR:1559134,ADC:0;13.62;1;37.95;2;4.14,EVT:1
[5] => *TS01,868323025167807,205504181116,GPS:3;S33.763735;E151.047204;0;0;1.08,STT:202;0,MGR:1559699,ADC:0;12.84;1;37.95;2;4.14,EVT:1
[6] => *TS01,868323025167807,205518181116,GPS:3;S33.763707;E151.047218;0;0;1.07,STT:2;0,MGR:1559699,ADC:0;12.84;1;37.95;2;4.14,EVT:F0;200
缺少'#'
。如果我通过循环并将'#'
附加到每个数据包,它将会太慢,因为我有时会有1000多个数据包
我需要保留'#
'并按'#'
我尝试了Is there way to keep delimiter while using php explode or other similar functions?的解决方案,但它也提供了最后一个空数组
答案 0 :(得分:2)
最好是设置空分隔符,并在#
字符和任何字符分别使用正面外观/向前看:
$list = preg_split('/(?<=#)(?=.)/', $msg);
对于(?<=#)
字符, #
是正面的,(?=.)
对于任何字符都是正面的(这可以避免在结尾处生成空字符串)。
实际上,如果*
是分隔符的一部分,则以下正则表达式可以更好地工作(更可靠):
$list = preg_split('/(?<=#)(?=\*)/', $msg);
答案 1 :(得分:0)
此代码将帮助您获得所需的输出 -
android:windowSoftInputMode="adjustResize"