从字符串中获取两个字母

时间:2015-05-27 16:08:23

标签: php

我有一个字符串:

  

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;
}

7 个答案:

答案 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)