【问题标题】:Exploding a full string without a delimiter in PHP在 PHP 中分解没有分隔符的完整字符串
【发布时间】:2014-04-07 09:19:46
【问题描述】:

如果我得到一个像BA00008424BA00008425BA00008426 这样的字符串。我怎样才能将它们分解成:

  • BA00008424
  • BA00008425
  • BA00008426

从这个例子..

$pizza = "piece1|piece2|piece3|piece4|piece5|piece6";

$pieces = explode("|", $pizza);

在这里他们以“|”爆炸,但我想在下一个“BA”之后爆炸。

提前致谢! :)

【问题讨论】:

    标签: php arrays function output explode


    【解决方案1】:

    BA替换为BA[space],然后用空格作为分隔符将其分解,并抓取除第一个元素之外的所有元素,因为它包含空格:

    $str = 'BA00008424BA00008425BA00008426';
    $str = str_replace('BA', ' BA', $str);
    print_r(array_slice(explode(' ', $str), 1));
    

    输出:

    Array
    (
        [0] => BA00008424
        [1] => BA00008425
        [2] => BA00008426
    )
    

    Demo

    【讨论】:

    • 这是正确的方法...... str_split的问题是如果计数超过10就会有问题......所以推荐这种方式
    • 它只会计算 3 个 BA,所以这对我来说很棒。谢啦! :)
    【解决方案2】:

    如果BA*** 的长度始终相同,您可以尝试使用str_split。否则,您可以通过“BA”爆炸并将BA添加到爆炸的碎片中。

    【讨论】:

    • 不,BA 的长度并不总是相同的。如何被“BA”爆破?
    • @Treps:看看this answer。这正是你想要的。
    • 怎么被“|”炸裂?
    【解决方案3】:

    如果数字总是固定长度,您可以使用 str_split。

    $str = "BA00008424BA00008425BA00008426";
    $output = str_split($str, 10);
    

    【讨论】:

      【解决方案4】:

      你可以使用 preg_match_all

      <?php
       $str="BA00008424BA00008425BA00008426";
      $data=array();
       preg_match_all('/\w{2}\d{8}/', $str, $data);
       print_r($data);
      // OUTPUT- Array ( [0] => Array ( [0] => BA00008424 [1] => BA00008425 [2] => BA00008426 ) )
       ?>
      

      【讨论】:

        【解决方案5】:

        首先你可以在explode之后替换这个空间值

        见下例:

        $str = "BA00008424BA00008425BA00008426";
        $str = str_replace('BA', ',BA', $str);
        print_r(array_slice(explode(',', $str), 1));
        

        【讨论】:

          【解决方案6】:

          $arr2 = str_split($str, 10);

          如果它总是十个长的就行了

          【讨论】:

            【解决方案7】:

            所有代码的长度都相同吗?在这种情况下,您可以使用:

            $str = 'BA00008424BA00008425BA00008426';
            var_dump(str_split($str, 10));
            

            如果它们的长度不同,您可以预先匹配它们,但我宁愿以另一种方式保存输入值。

            【讨论】:

              【解决方案8】:

              强制正则表达式版本。虽然我真的很喜欢 Shankar 的“插入空间”答案,但正则表达式可能很慢。

              也就是说,鉴于您有一个清晰的模式(两个字符前缀后跟数字),我认为这是一个值得的选择:

              <?php
              
              $subject = 'BA00008424BA00008425BA00008426';
              $pattern = '/BA\d+/';
              
              preg_match_all($pattern, $subject, $matches);
              
              print_r($matches);
              

              产量:

              Array
              (
                  [0] => Array
                      (
                          [0] => BA00008424
                          [1] => BA00008425
                          [2] => BA00008426
                      )
              
              )
              

              此处示例:https://eval.in/133117

              希望这会有所帮助! :)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-11-07
                • 2014-02-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-05-26
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多