我有一个字符串:
12121212
我想只得到1111,第一个字母,然后是第三个字母,然后是第五个字母......两个字母一个字母。
这有什么功能吗?我正在使用str_split然后我拿了我的数组的第一个字母,但它不是很干净。感谢。
这是我现在的代码,但它不是很灵活:
function loop_n_letter($string, $n)
{
$return = '';
$array = str_split($string);
foreach ($array as $i => $row)
{
if ($i % $n == 0)
{
$return .= $row[0];
}
}
return $return;
}
答案 0 :(得分:6)
回想一下,只需调用字符串的特定索引即可获得字符串的字符。尝试使用for循环:
$string = '12121212';
$length = strlen($string);
$result = '';
for ($i = 0; $i < $length; $i = $i + 2) {
$result .= $string[$i];
}
die($result);
您可以更改索引和增量以获取字符串的不同部分
答案 1 :(得分:3)
这是一个正则表达式:
$str = '12121212';
echo preg_replace('<(.)(.)>', '$1', $str);
答案 2 :(得分:2)
对于PHP&gt; = 5.5.0
$result = implode(
'',
array_column(
str_split($myString, $n),
$n - 1
)
);
答案 3 :(得分:0)
在这种特殊情况下,您可以使用implode()和explode():
$string=implode(explode('2', '121212'));
echo $string;
否则,您可以使用循环:
$start='121212';
$string = '';
for ($i = 1; $i <= strlen($start); $i++) {
if($i &1){
$string .= substr($start,$i,1);
}
}
echo $string;
答案 4 :(得分:0)
这是我尝试重写你的功能:
$string[1]
正如其他人指出的那样,您可以使用数组样式语法来调用特定位置的字符,因此在2
的示例中将{{1}}。
答案 5 :(得分:0)
如果你想避免字符串到数组的转换(然后回到字符串):
$string = '12121212';
$stringLength = strlen($string);
$resultString = '';
for ($i=0; $i<$stringLength; $i+=2) {
$resultString .= substr($string, $i, 1);
}
答案 6 :(得分:0)
正则表达式解决方案:/(\d)(?:\d)/
- 捕获第一个数字,但不捕获以下数字?:
=非捕获
preg_match_all('/(\d)(?:\d)/', '12121212', $matches);
var_dump($matches[1]);
输出
array (size=4)
0 => string '1' (length=1)
1 => string '1' (length=1)
2 => string '1' (length=1)
3 => string '1' (length=1)
或字符串
$result = preg_replace('/(\d)(?:\d)/', "$1", '12121212');
输出
string '1111' (length=4)