【问题标题】:Tokenising and reconstructing a string containing delimited name-value pairs标记和重构包含分隔名称-值对的字符串
【发布时间】:2013-03-20 23:50:56
【问题描述】:

我的字符串结构如下:

 "01;AA:02;AB:03;AC:"

有没有办法把它变成 $_POST 风格的格式,其中:

 $MyVar['01'] = "AA"
 $MyVar['02'] = "AB"
 $MyVar['03'] = "AC"

?

当我完成更改后,我还想以某种方式将其内爆回原始字符串格式。 (内爆时不需要前导零,爆炸时可能不存在)

编辑:添加信息

 InevntorySKU;InventoryQTY:
     086;99:043;99:130;99:131;99:132;99:133;99:134;99:135;99:136;99:137;99:138;99:139;99:140;99:141;99:142;99:143;99:

【问题讨论】:

    标签: php arrays string explode implode


    【解决方案1】:

    没有内置函数可以做到这一点,但你可以这样做:

    $MyVar = array();
    foreach(array_filter(explode(":",$input)) as $i) {
        list($k,$v) = explode(";",$i,2);
        $MyVar[$k] = $v;
    }
    

    您将使用类似的设置进行相反的过程:

    $output = "";
    foreach($MyVar as $k=>$v) $output .= $k.";".$v.":";
    

    【讨论】:

    • 问题 - 在您的示例中,提前知道 $K 用于召回。
    【解决方案2】:

    使用 preg_match_all:

    preg_match_all('/\d{2}|[a-z]{2}/i', "01;AA:02;AB:03;AC:", $array);
    
    for($i=0;$i<count($array[0]);$i+=2){
        $myvar[$array[0][$i]] = $array[0][$i+1];
    }
    
    print_r($myvar);
    

    使用 preg_split:

    $str = '086;99:043;99:130;99:131;99:132;99:133;99:134;99:135;99:136;99:137;99:138;99:139;99:140;99:141;99:142;99:143;99:';
    $array = preg_split('/;|:/', $str);
    
    for($i=0;$i<count($array)-1;$i+=2){
        $myvar[$array[$i]] = $array[$i+1];
    }
    
    print_r($myvar);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多