【问题标题】:How to explode using integer value as delimiter如何使用整数值作为分隔符进行爆炸
【发布时间】:2014-09-08 01:13:13
【问题描述】:

我在 php 中得到一个这样的字符串值 -

How are you|1 I am fine|2 That is fine|3

我想将这个字符串分解为这个整数值的分隔符。基本上我需要这三个值。

How are you|1 
I am fine|2 
That is fine|3

任何人都可以建议我该怎么做。

【问题讨论】:

    标签: php substring explode delimiter


    【解决方案1】:

    尝试使用带有一些正则表达式的preg_split() 而不是explode()

    $arr = preg_split('#(?<=\|\d )(?=[a-z])#i', "How are you|1 I am fine|2 That is fine|3");
    

    这将拆分字符串,其中有一个管道字符 | 后跟一个数字,后跟一个空格。

    编辑

    如果空格可以是换行符或回车符,请在其中添加 or 条件:

    $arr = preg_split('#(?<=\|\d( |\n|\r))(?=[a-z])#i', "How are you|1 I am fine|2 That is fine|3");
    

    【讨论】:

    • 您的代码运行良好,但我遇到了一个新问题。请检查我的答案。
    • @gsm11001 您可以简单地预先替换所有换行符str_replace(array("\r", "\n"), "", $str)。或者稍微改变一下你的正则表达式:#(?&lt;=\|\d\n)(?=[a-z])#i
    • 我无法替换换行符,因为它也会修改插件。但是,在我从数据库中获得的价值中,我看不到任何换行代码。也改变正则表达式是不成功的。
    • 只是在拆分字符串后重新添加换行符? $arr = array_map(function($v){ return $v."\n"; }, $arr)
    • 我很抱歉这么说,但具有讽刺意味的是它不能正常工作。我不知道如何,但该换行问题似乎尚未解决。我正在发布输出,我得到了什么。请再帮我一次。
    【解决方案2】:

    试试preg_match_all

    $str     = 'How are you|1 I am fine|2 That is fine|3';
    $pattern = '/(\D+)(\d+)/';
    $res     = preg_match_all($pattern, $str, $matches);
    print_r($matches[0]);
    

    【讨论】:

      【解决方案3】:

      你可以使用65Fbef05的技巧

      你的情况是

      $str = 'How are you|1 I am fine|2 That is fine|3';
      $del = array(1, 2, 3);
      
      // In one fell swoop...
      $arr = explode( $del[0], str_replace($del, $del[0], $str) );
      

      【讨论】:

      • 感谢您的回复布鲁泽蒂。但是我不能在我的数据库中使用你的代码 bcz 那些整数并不总是按递增顺序排列。但我给你一个 +1,因为这段代码是非常正确的。
      【解决方案4】:

      尝试使用 chr(13) 作为分隔符进行爆炸。

      试试这个循环。

      $extras = $db->loadRowList();
      
                  $num=sizeof($extras);
                  for($i=0;$i<$num;$i++)
                  {               
                      echo "<br>".$extras[$i][0]."<br>";    
                      $arr=explode(chr(13),  $extras[$i][0]);
      
                      $num1=sizeof($arr);
                      for($j=0;$j<$num1;$j++)
                      {
                          $tmp = explode('|', $arr[$j]);
      
                          $num2=sizeof($tmp);
                          for($k=0;$k<$num2;$k++)
                          {
                              echo $tmp[$k]."<br>";
                          }                       
                      }
                  }
      

      【讨论】:

      • 非常感谢。有效。导致问题的是 chr(13)。
      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      相关资源
      最近更新 更多