Строковые буквы PHP - PullRequest
       1

Строковые буквы PHP

4 голосов
/ 10 августа 2010

У нас есть переменная $string, она содержит такой текст, как:

About 200 million CAPTCHAs are solved by humans around the world every day.

Как мы можем получить 2-3 последние или первые буквы каждого слова (длина которых превышает 3 буквы) ?

Проверяет их на соответствие текста с помощью foreach():

if ('ey' is matched in the end of some word) {
  replace 'ey' with 'ei' in this word;
}

Спасибо.

Ответы [ 3 ]

3 голосов
/ 10 августа 2010

Во-первых, я дам вам пример того, как перебирать строку и работать с каждым словом в строке.

Во-вторых, я объясню каждую часть кода, чтобы вы могли изменитьэто точно соответствует вашим потребностям.


Вот как можно переключить последние 2 буквы (если они "эй") для каждого слова длиной более 3 букв.

<?php
  // Example string
$string = 'Hey they ey shay play stay nowhey';

  // Create array of words splitting at spaces
$string = explode(" ", $string);

  // The search and replace strings
$lookFor = "ey";
$switchTo = "ei";

  // Cycle through the words
foreach($string as $key => $word)
{
      // If the word has more than 3 letters
    if(strlen($word) > 3)
    {
          // If the last two letters are what we want
        if ( substr($word, -2) == $lookFor )
        {
              // Replace the last 2 letters of the word
            $string[$key] =  substr_replace($word, $switchTo, -2);
        }
    }
}
  // Recreate string from array
$string = implode(" ", $string);
  // See what we got
echo $string;
  // The above will print:
  // Hey thei ey sashei play nowhei
?>

Живой пример


Я объясню каждую функцию, чтобы вы могли модифицировать вышеописанное так, как вам нужно, поскольку я не совсем понимаю все ваши спецификации:

  1. explode () возьмет строку и разделит ее на массив.Первый аргумент - это то, что вы используете для его разделения.Второй аргумент - это строка, поэтому explode(" ", $string) разделит $string с помощью пробелов.Пробелы не будут включены в массив.
  2. foreach () будет циклически проходить через каждый элемент массива.foreach($string as $key => $word) будет проходить через каждый элемент $string, и для каждого элемента он будет присваивать порядковый номер $key, а значение элемента (в данном случае это слово) - $word.
  3. strlen () возвращает длину строки.
  4. substr () возвращает часть строки.Первый аргумент - это строка, второй аргумент - это то, где начинается подстрока, а третий необязательный аргумент - это длина подстроки.При отрицательном начале начало будет рассчитываться от конца строки до конца строки.Другими словами, substr($word, -2) возвращает подстроку, которая начинается с двух от конца строки и идет до конца строки ... последние две буквы.Если вам нужны первые две буквы, вы должны использовать substr($word, 0, 2), поскольку вы начинаете с самого начала и хотите, чтобы длина составляла 2 буквы.
  5. substr_replace () заменитподстрока в строке.Первый аргумент - это вся строка.Второй аргумент - ваша замещающая подстрока.Третий аргумент - место, где начинается замена, а четвертый необязательный аргумент - длина подстроки, поэтому substr_replace($word, $switchTo, -2) будет принимать $word и, начиная с предпоследней буквы, заменить то, что там, на $switchTo.В этом случае мы поменяем последние две буквы.Если вы хотите заменить первые две буквы, вы должны использовать substr_replace($word, $switchTo, 0, 2)
  6. implode () противоположно разнесению.Он принимает массив и формирует его в строку, используя указанный разделитель.
2 голосов
/ 10 августа 2010
$string = 'About 200 million CAPTCHAs are solved by humans around the world every day.';
$result = array();
$words = explode(" ",$string);
foreach($words as $word){
 if(strlen($word) > 3){
  $result[] = substr($word,0,3); //first 3 characters, use "-3" for second paramter if you want last three
 }
}
1 голос
/ 10 августа 2010
function get_symbols($str, $reverse = false)
{
    $symbols = array();   

    foreach (explode(' ', $str) as $word)
    {
        if ($reverse) 
          $word = strrev($word);

        if (strlen($word) > 3)
          $word = substr($word, 0, 3);

        array_push($symbols, $word);
    }

    return $symbols;
}

РЕДАКТИРОВАТЬ:

function change_reverse_symbol_in_word($str, $symbol, $replace_to)
{
    $result = ""; 

    foreach (explode(' ', $str) as $word)
    {
        $rword = $word;

        if (strlen($rword) > 3)
        {
            $rword = substr($word, 0, -3);
        }

        if (!strcmp($symbol, $rword))
        {
            $word = substr($word, 0, strlen($word) - strlen($rword)) . $replace_to;
        }

        $result .= $word . " ";
    }

    return $result;
}

И если вы хотите использовать это как ваш вопрос, вы должны назвать это так:

$string_malformed = change_reverse_symbol_in_word($str, "ey", "ei");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...