Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中拆分字符串?_Php - Fatal编程技术网

如何在php中拆分字符串?

如何在php中拆分字符串?,php,Php,我有一个类似$str的字符串 $str = "00016cam 321254300022cam 321254312315300020cam 32125433153"; 我想像这样把它分成一个数组。“cam”之前的数字是字符串长度 $splitArray = ["00016cam 3212543", "00022cam 3212543123153", "00020cam 32125433153"] 我尝试了以下代码: $lengtharray = array(); while

我有一个类似$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); 
    }
$lengtharray=array();
而($str!=null)
{ 
$sublength=substr($str,$star,$end);
$star+=(int)$sublength;//echo$star。“
”;//echo$sublength。“
”; 如果($star==$total) { 出口 } 其他的 { } 阵列推送($lengtharray,$star);//回声 打印(长阵列); }
您可以尝试此单行解决方案

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

你可以试试这个单线解决方案

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

这个代码对我有用。希望有帮助

$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];
$str=“**00016**cam 3212543**00022**cam 3212543123153**00020**cam 32125431353”;
$arr=爆炸(“**”,$str);
对于($i=1;$i
这个代码对我很有用。希望有帮助

$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];
$str=“**00016**cam 3212543**00022**cam 3212543123153**00020**cam 32125431353”;
$arr=爆炸(“**”,$str);
对于($i=1;$i
如果您的字符串不包含星号,恐怕您需要编写一个简单的解析器,它将:

  • 从左边取字符,直到它不是数字
  • 具有长度的do
    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));
    

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

    • 从左边取字符,直到它不是数字
    • 具有长度的do
      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));
      

      你试过什么?我试过这个$lengtharray=array();while($str!=null){$sublength=substr($str,$star,$end);$star+=(int)$sublength;//echo$star.“
      ”;//echo$sublength.“
      ”;if($star==$total){exit;}else{}数组推送($lengtharray,$star);//echo打印($lengtharray);}但效果不好。您可以使用explode函数从$strSorry创建数组,我的字符串如下所示$str=“00016cam 32125430002CAM 321254312315300020cam 32125431353”不包括**。我不知道如何让普通的爆炸。只尝试substr()。它在每次启动时总是包含三个0还是会更改?您尝试了什么?我尝试了这个$lengtharray=array();while($str!=null){$sublength=substr($str,$star,$end);$star+=(int)$sublength;//echo$star.“
      ”;//echo$sublength.“
      ”;if($star==$total){exit;}else{}数组推送($lengtharray,$star);//echo打印($lengtharray);}但效果不好。您可以使用explode函数从$strSorry创建数组,我的字符串如下所示$str=“00016cam 32125430002CAM 321254312315300020cam 32125431353”不包括**。我不知道如何让普通的爆炸。请只尝试substr()。它在每次启动时总是包含三个0,还是会更改?我已尝试一步一步地理解您的函数。这是一个令人敬畏的答案。谢谢。我已经试着一步一步地理解你的功能。这是一个令人敬畏的答案。非常感谢。