我有一系列参数,这些参数的结构可能不同,参数顺序也各不相同,如下所示:
T01
T0101
T01C0.95
T01H3000C0.95(brackets indicate a comment
T01C0.95H3000(brackets indicate a comment
这需要变成这样的数组:
T01H3000C0.95 or T01C0.95H3000
T01[H] = 3000
T01[C] = 0.95
ignore >(brackets indicate a comment
如果T部分的长度为3或4个字符:
T0102H3000
"T"number1.number2[CP] = number3.number4
"T"number1.number2[H] = 3000
T总是在1到4个数字之间。 期间。和空格不应该拆分字符串。
第一部分很简单,因为我知道它总是以T开头。所以我可以使用这样的字符串:
foreach($lines as $line) {
if (substr( $line, 0, 1 ) === "T"){
$lineArray = [];
$trimedLine ="";
print_r($line." - Tool Found");
print_r("<br>");
$trimedLine = ltrim($line, 'T');
$lineArray = preg_split("/[a-zA-Z]/",$trimedLine,2);
print_r("T - ".$lineArray[0]);
print_r("<br>");
print_r("strlen: ".strlen($lineArray[0]));
print_r("<br>");
if (strlen($lineArray[0])== 1 OR strlen($lineArray[0])== 2){
${"T".$lineArray[0]}= [];
print_r(${"T".$lineArray[0]});
print_r("<br>");
} else {
if (strlen($lineArray[0])== 3 OR strlen($lineArray[0])== 4)
{
${"T".$lineArray[0]}= [];
${"T".$lineArray[0]}["CP"] = substr($lineArray[0], 2);
print_r(${"T".$lineArray[0]}["CP"]);
print_r("<br>");
} else {
print_r("Strange string size");
print_r("<br>");
}
}
}
之后它变得更加复杂。索引有可能超过单个字母ex。 SH或SP。
我可以通过使用与我的测试代码类似的东西慢慢地将字符串逐个剪下来,但它似乎非常复杂。
我应该如何将其分解为数组?
答案 0 :(得分:1)
使用preg_replace()
和parse_str()
,以下是
<?php
$input='T01H3000C0.95(brackets indicate a comment';
/* from preg_replace above input we make
H=3000&C=0.95&, parse_str will put it in array
*/
parse_str(
preg_replace("/([A-Za-z])([+-]?\d+(\.\d+)?)/",'$1=$2&',
preg_replace('/(^T01)|(\(.*)/','',$input)
),
$array
);
print_r($array);
?>
输出:
$ php test.php
Array
(
[H] => 3000
[C] => 0.95
)