我正在尝试剥离下面的每个第三个角色(在一个例子中是一个时期)是我最好的猜测并且接近我已经得到但我错过了一些东西,可能是次要的。此方法(如果我可以使它工作)也比正则表达式匹配更好,删除?
$arr = 'Ha.pp.yB.ir.th.da.y';
$strip = '';
for ($i = 1; $i < strlen($arr); $i += 2) {
$arr[$i] = $strip;
}
答案 0 :(得分:2)
你能做到的一种方法是:
<?php
$oldString = 'Ha.pp.yB.ir.th.da.y';
$newString = "";
for ($i = 0; $i < strlen($oldString ); $i++) // loop the length of the string
{
if (($i+1) % 3 != 0) // skip every third letter
{
$newString .= $oldString[$i]; // build up the new string
}
}
// $newString is HappyBirthday
echo $newString;
?>
如果您尝试删除的字母始终是相同的,则explode()函数可能会起作用。
答案 1 :(得分:1)
这可能有效:
echo preg_replace('/(..)./', '$1', 'Ha.pp.yB.ir.th.da.y');
使其成为通用目的:
echo preg_replace('/(.{2})./', '$1', $str);
其中2
在此上下文中表示您保留两个字符,然后丢弃下一个字符。
答案 2 :(得分:1)
一种方法:
$old = 'Ha.pp.yB.ir.th.da.y';
$arr = str_split($old); #break string into an array
#iterate over the array, but only do it over the characters which are a
#multiple of three (remember that arrays start with 0)
for ($i = 2; $i < count($arr); $i+=2) {
#remove current array item
array_splice($arr, $i, 1);
}
$new = implode($arr); #join it back
或者,使用正则表达式:
$old = 'Ha.pp.yB.ir.th.da.y';
$new = preg_replace('/(..)\./', '$1', $old);
#selects any two characters followed by a dot character
#alternatively, if you know that the two characters are letters,
#change the regular expression to:
/(\w{2})\./
答案 3 :(得分:0)
我只使用array_map和回调函数。看起来大致如下:
function remove_third_char( $text ) {
return substr( $text, 0, 2 );
}
$text = 'Ha.pp.yB.ir.th.da.y';
$new_text = str_split( $text, 3 );
$new_text = array_map( "remove_third_char", $new_text );
// do whatever you want with new array