如何在php中拆分字符串?

时间:2019-01-22 08:04:25

标签: php

我有一个像$ str这样的字符串。

$str = "00016cam 321254300022cam 321254312315300020cam 32125433153";

我想像这样将其拆分为数组。 “ cam”之前的数字是字符串长度。

$splitArray = ["00016cam 3212543", "00022cam 3212543123153", "00020cam 32125433153"]

我尝试了以下代码:

    $lengtharray = array(); 
    while ($str != null) 
    { 
         $sublength = substr($str, $star, $end); 
         $star += (int)$sublength; // echo $star."<br>"; // echo $sublength."<br>"; 
         if($star == $total)
         { 
             exit; 
         }
         else
         { 

         } 

          array_push($lengtharray, $star); // echo 
          print_r($lengtharray); 
    }

3 个答案:

答案 0 :(得分:4)

您可以尝试此1行解决方案

$str = explode('**', preg_replace('/\**cam/', 'cam', $str)) ;

答案 1 :(得分:0)

此代码对我有用。希望会有所帮助。

$str = "**00016**cam 3212543**00022**cam 3212543123153**00020**cam 32125433153";
$arr = explode("**", $str);
for ($i=1; $i < sizeof($arr); $i=$i+2) 
    $arr_final[]=$arr[$i].$arr[$i+1];

答案 2 :(得分:0)

如果您的字符串不包含星号,那么恐怕您需要编写一个简单的解析器,该解析器将:

  • 从左侧开始输入字符,直到不为数字为止
  • 执行substr的长度
  • 在未使用的字符串上重复前面的步骤

    <?php
    
    $input = "00016cam 321254300022cam 321254312315300020cam 32125433153";
    
    function parseArray(string $input)
    {
        $result = [];
    
        while ($parsed = parseItem($input)) {
            $input = $parsed['rest'];
            $result[] = $parsed['item'];
        }
    
        return $result;
    }
    
    function parseItem(string $input)
    {
        $sLen = strlen($input);
        $len = '';
        $pos = 0;
        while ($pos < $sLen && is_numeric($input[$pos])) {
            $len .= $input[$pos];
            $pos++;
        }
    
        if ((int) $len == 0) {
            return null;
        }
    
        return [
            'rest' => substr($input, $len),
            'item' => substr($input, 0, $len)
        ];
    }
    
    var_dump(parseArray($input));