我有一个像$ 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);
}
答案 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));