Как построить Сокращения фразы в PHP - PullRequest
12 голосов
/ 09 сентября 2010

Я ищу способ извлечь первую букву каждого слова из поля ввода и поместить его в переменную.

Пример: если поле ввода равно "Stack-Overflow Questions Tags Users", тогда значение для переменной должно быть примерно таким: "SOQTU"

Ответы [ 8 ]

18 голосов
/ 09 сентября 2010
$s = 'Stack-Overflow Questions Tags Users';
echo preg_replace('/\b(\w)|./', '$1', $s);

то же самое, что и кодаддикт, но короче

  • Для поддержки Юникод добавьте модификатор u в регулярное выражение: preg_replace('...../u',
12 голосов
/ 09 сентября 2010

Что-то вроде:

$s = 'Stack-Overflow Questions Tags Users';

if(preg_match_all('/\b(\w)/',strtoupper($s),$m)) {
    $v = implode('',$m[1]); // $v is now SOQTU
}

Я использую регулярное выражение \b(\w), чтобы сопоставить слово-символ , следующее сразу за границей слова .

EDIT: Чтобы убедиться, что все символы Acronym прописные, вы можете использовать strtoupper, как показано.

5 голосов
/ 09 сентября 2010

Просто чтобы быть совсем другим:

$input = 'Stack-Overflow Questions Tags Users';

$acronym = implode('',array_diff_assoc(str_split(ucwords($input)),str_split(strtolower($input))));

echo $acronym;
5 голосов
/ 09 сентября 2010
$initialism = preg_replace('/\b(\w)\w*\W*/', '\1', $string);
3 голосов
/ 09 сентября 2010

Соответствие регулярного выражения, как сказано выше в codaddict, или str_word_count () с 1 в качестве второго параметра, который возвращает массив найденных слов. Смотрите примеры в руководстве. Тогда вы можете получить первую букву каждого слова любым удобным вам способом, включая substr($word, 0, 1)

3 голосов
/ 09 сентября 2010

Если они разделены только пробелом , а не другими вещами. Вот как вы можете это сделать:

function acronym($longname)
{
    $letters=array();
    $words=explode(' ', $longname);
    foreach($words as $word)
    {
        $word = (substr($word, 0, 1));
        array_push($letters, $word);
    }
    $shortname = strtoupper(implode($letters));
    return $shortname;
}
2 голосов
/ 09 сентября 2010
function initialism($str, $as_space = array('-'))
{
    $str = str_replace($as_space, ' ', trim($str));
    $ret = '';
    foreach (explode(' ', $str) as $word) {
        $ret .= strtoupper($word[0]);
    }
    return $ret;
}

$phrase = 'Stack-Overflow Questions IT Tags Users Meta Example';
echo initialism($phrase);
// SOQITTUME
2 голосов
/ 09 сентября 2010

Функция str_word_count () может сделать то, что вы ищете:

$words = str_word_count ('Stack-Overflow Questions Tags Users', 1);
$result = "";
for ($i = 0; $i < count($words); ++$i)
  $result .= $words[$i][0];
...