Стрлен, чтобы раздеть каждые [х] символов - PullRequest
1 голос
/ 29 апреля 2011

Я пытаюсь лишить каждого третьего символа (в примере период) ниже, это мое лучшее предположение, и оно близко к тому, что я получил, но я что-то упустил, возможно, незначительное. Также этот метод (если бы я мог заставить его работать) был бы лучше, чем регулярное выражение, удалить?

$arr = 'Ha.pp.yB.ir.th.da.y';
$strip = '';
for ($i = 1; $i < strlen($arr); $i += 2) {
$arr[$i] = $strip; 
}

Ответы [ 4 ]

2 голосов
/ 29 апреля 2011

Один из способов сделать это:

<?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 голос
/ 29 апреля 2011

Способ сделать это:

$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})\./
1 голос
/ 29 апреля 2011

Это может сработать:

echo preg_replace('/(..)./', '$1', 'Ha.pp.yB.ir.th.da.y');

Для общего назначения:

echo preg_replace('/(.{2})./', '$1', $str);

где 2 в этом контексте означает, что вы сохраняете два символа, а затем отбрасываете следующий.

0 голосов
/ 29 апреля 2011

Я бы просто использовал 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
...