PHP从字母和数字字符串中创建一个关联数组,并将字母作为索引

PHP从字母和数字字符串中创建一个关联数组,并将字母作为索引,php,arrays,Php,Arrays,我有一些参数字符串,这些参数的结构可能不同,参数顺序也可能不同,如下所示: 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 foreach(

我有一些参数字符串,这些参数的结构可能不同,参数顺序也可能不同,如下所示:

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
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>");    
    }
    }
    }
需要将其制作成如下数组:

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
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>");    
    }
    }
    }
如果T段长度为3或4个字符:

T0102H3000
"T"number1.number2[CP] = number3.number4
"T"number1.number2[H] = 3000
T的长度始终在1到4个数字之间。 时期。空格不应分割字符串

第一部分很简单,因为我知道它总是以T开头。所以我可以像这样处理字符串:

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
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>");    
    }
    }
    }
后来就变得更复杂了。该指数可能不止一个字母,如SH或SP

通过使用类似于我的测试代码的东西,我可以慢慢地一部分一部分地减少字符串,但它看起来非常复杂

我应该如何将其分解成一个数组?

使用and,下面是一个开始的示例


我建议使用explode来拆分字符串。到目前为止你试过什么了吗?我考虑过在A-Za-z上爆炸,但那会摧毁爆炸的角色,不是吗?我将为问题添加更多信息。请向我们展示您已经尝试过的代码以及哪些代码不起作用,以便我们可以帮助您修复它。问题应该显示研究的证据和自己解决问题的尝试。这个答案看起来很有希望。将=和&添加到字符串中应该是安全的。parse_str是我希望存在的函数类型。这个预想是否有两个字母而不是一个?[SP]=>20抱歉,我错过了顶部的示例。我自己试过了,多封信都写得很好。我将尝试这种方式,并接受答案,如果它运行良好。谢谢这是经过测试的,可以完全适应我的需要。谢谢你的帮助