我试图在所有"不同字符之间创建一个空格,例如:
"11131221133112" should result in "111 3 1 22 11 33 11 2"
"1321131112" should result in "1 3 2 11 3 111 2"
我尝试使用递归函数,不知道这是否是最佳方法,因为我无法在PHP中找到任何内置函数。这是我的功能:
function stringSplitter($str) {
$strArr = str_split($str);
foreach ($strArr as $key => $value) {
if ($key == count($strArr)-1) return (substr($str, 0));
if ($value != $strArr[$key+1]) {
return (substr($str, 0, $key+1)." ".stringSplitter(substr($str, $key)));
}
}
}
出于某种原因,这个功能似乎无限迭代,我无法弄清楚原因。我哪里出错?
有更好的方法吗?我想使用explode来解决数组中的应答字符串,这可以直接完成吗?
答案 0 :(得分:11)
RegEx 方法,
在RegEx \ 1 中,它是对 \ d
<?php
$pattern = '/(\d)\1*/';
$str = '11131221133112';
$r = preg_match_all($pattern, $str, $result);
if ($r !== FALSE) {
var_dump(implode(' ', $result[0]));
}
else {
print 'error';
}
答案 1 :(得分:5)
最简单的解决方案是:
$string = '11131221133112';
$strarr = str_split($string);
$tmp = null;
$newstr = '';
foreach($strarr as $a){
$newstr .= ($a == $tmp) ? $a:' '.$a;
$tmp = $a;
}
echo $newstr;
输出:111 3 1 22 11 33 11 2
答案 2 :(得分:2)
好问题:)
你可以循环你的角色并留意最后一个角色,如果它与当前角色不同,添加一个空格来输出,然后添加角色本身。
<?php
$string="11131221133112";
$last="";
for($i=0;$i<strlen($string);$i++)
{
$output.= $string[$i]!=$last ? " ".$string[$i] : $string[$i];
$last=$string[$i];
}
$output=trim($output);
<强>输出强>
111 3 1 22 11 33 11 2
和
1 3 2 11 3 111 2
<强> Fiddle 强>
答案 3 :(得分:0)
试试这个。
$string="11131221133112";
$seperated=str_split($string);
$lastChar='';
foreach ($seperated as $key => $value) {
if($lastChar!=''&&$lastChar!=$value){
echo ' ';
}
$lastChar=$value;
echo $value;
}