【问题标题】:Split a comma separated string but only split by a comma拆分逗号分隔的字符串,但仅用逗号拆分
【发布时间】:2015-03-07 09:51:54
【问题描述】:

你好,我有一个很长的字符串

0BV,0BW,100,102,108,112,146,163191,192,193,1D94,19339,1A1,1AA,1AE,1AFD,1AG,1AKF.......

我想通过 sub sting 在页面中显示它

喜欢

0BV,0BW,100,102,108,112,146
163191,192,193,1D94,19339
1A1,1AA,1AE,1AFD,1AG,1AKF

我想要做的是从字符串创建子字符串,长度为 100 个字符,但是如果第 100 个字符不是逗号,我想检查字符串中的下一个逗号并以此分割。

我尝试使用chunk()按字数拆分,但由于子字符串长度不同,在页面中显示不合适

$db_ocode   = $row["option_code"];

$exclude_options_array =    explode(",",$row["option_code"]);
$exclude_options_chunk_array = array_chunk($exclude_options_array,25);

$exclude_options_string = '';   
foreach($exclude_options_chunk_array as $exclude_options_chunk)
{
    $exclude_options_string .= implode(",",$exclude_options_chunk);
    $exclude_options_string .= "</br>";
}

请帮忙。在此先感谢

【问题讨论】:

    标签: php regex string split substring


    【解决方案1】:

    取弦,设置截断位置。如果该位置不包含逗号,则找到该位置之后的第一个逗号并从那里截断。简单

    <?php
    
    $string="0BV,0BW,100,102,108,112,146,163191,192,193,1D94,19339,1A1,1AA,1AE,1AFD";
    
    $cutoff=30;
    if($string[$cutoff]!=",")
      $cutoff=strpos($string,",",$cutoff);
    echo substr($string,0,$cutoff);
    

    Fiddle

    【讨论】:

      【解决方案2】:
      (.{99})(?=,),|([^,]*),
      

      您可以抓取捕获而不是拆分,这非常容易。查看20 字符的演示。

      https://regex101.com/r/sH8aR8/37

      【讨论】:

      • 不错的答案:)。那 99 是不是 19 的错字导致小提琴。抱歉,不是,因为 99 是 OP 想要的。
      • @Hanky웃Panky 没有 OP 想要 100 字符。100th 字符是 , 之后的 .{99}
      【解决方案3】:

      使用 Hanky Panky 的回答,我能够为我的问题提供完整的解决方案,非常感谢 Hanky panky。如果我的代码效率不高,请编辑它。

      $string="0BV,0BW,100,102,108,112,146,163191,192,193,1D94,19339,1A1,1AA,1AE,1AFD";
      
      for($start=0;$start<strlen($string);) {
      
             $cutoff=30;
             if(isset($string[$start+$cutoff]) && $string[$start+$cutoff]!=",") 
             {
                $cutoff=strpos($string,",",$start+$cutoff);        
             }
             else if(($start+$cutoff) >= strlen($string))
             {
                $cutoff = strlen($string);
             }
             else if($start >= 30)
             {
                $cutoff = $start + $cutoff;
             }
      
             echo substr($string,$start,$cutoff-$start)."\n";
             $start=$cutoff+1;
          }
      

      【讨论】:

        【解决方案4】:

        万一蟒蛇

        ln=0
        i=1
        str='0BVAa,0BW,100,102,108,112,146,163191,192,193,1D94,19339,1A1,1AA,1AE,1AFD,1AG,1AKF'
        for item in str:
            print (item),
            ln=ln+len(item)
            if ln/10>=i and item==',':
                print ""
                i=i+1
        

        【讨论】:

          猜你喜欢
          • 2018-12-21
          • 1970-01-01
          • 2010-12-17
          • 1970-01-01
          • 2017-01-05
          • 1970-01-01
          • 1970-01-01
          • 2012-05-24
          相关资源
          最近更新 更多