Как построить аббревиатуры фразы в PHP

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

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

8 ответов


что-то типа:

$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) матч слово-char сразу после слова границы.

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


$s = 'Stack-Overflow Questions Tags Users';
echo preg_replace('/\b(\w)|./', '', $s);

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

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

$initialism = preg_replace('/\b(\w)\w*\W*/', '', $string);

просто чтобы быть абсолютно разные:

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

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

echo $acronym;

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

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

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


на 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];

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