2012-07-26 87 views
-2

nickb最初提供了这些代码。这最初做的是,当用户输入文本时,它会通过获取输入的每个单词的第一个字母将其转换为缩写词。我现在想要做的是包括输入文本的最后一个字作为输出的一部分。例如:如果用户输入自动取款机,则输出将是:ATM机。到目前为止,这就是我所提出的,不幸的是,我现在处于亏损状态,并且迫切希望能够实现这一目标。请帮忙。输入文本的首字母缩写+最后一个字。 PHP

function convert($text) 
{ 
    $acronym = array(); 
    $text2 = explode(' ', $text); 
    foreach(explode(' ', $text) as $word) 
    {     
     $acronym[] = strtoupper($word[0]); 
    } 
    $count = str_word_count($acronym); 
    array_push($acronym, $text2[$count]); 
    echo $text2[$count]; 
    return implode('', $acronym); 
} 

回答

3

它看起来像你正在一个一个地在阵列中使用$count-1

然而,你的代码可以提高到这样的:

function convert($text) { 
    return preg_replace('/\b(.).*?\b\s*/',"$1",$text).strrchr($text," "); 
} 
// input: convert("Department of Redundancy Department"); 
// output: DoRD Department 
+1

+1难以理解的正则表达式的解决方案 – 2012-07-26 15:18:25

+0

感谢您的帮助@Kolink,但是你提供的代码给出了这样的输出: ATMachine机 我需要的是有一个输出,它看起来像: ATM机 – user1242749 2012-07-26 15:19:06

+0

* *注意** @ user1242749 Kolink表示在这一行中:'array_push($ acronym,$ text2 [$ count]);'使用'count-1'而不是'$ count',因为在一个包含3个项目的数组中,最后一项在'[2]'。 – 2012-07-26 15:19:50

1

看起来,这不是清楚你的代码做什么。所以让我们从头开始编写新的代码,但不要复制它,但你应该输入它。我在这里使用的所有函数都记录在PHP手册中。如果一个功能是新的给你,或者你不知道一个或其他参数,只是读了起来,学习:

$words = str_word_count($text, 2); 

这行代码提取从$text所有单词到一个数组$words

要获得的最后一个字,你只需要获得最后一个数组项:

$last_word = end($words); 

所以这已经是半完成的工作。现在,你要提取所有的第一个字母:

$first_letters = array(); 
foreach ($words as $word) { 
    $first_letters[] = substr($word, 0, 1); 
} 

有了这样做,所有的第一个字母是阵列$first_letters在和最后一个字是字符串变量$last_word英寸有一个警告。如果$text中没有字词,则这不起作用。只是说,自己检查一下。

现在让我们编译最终的字符串:

$buffer = implode('', $first_letters); 

是将数组转换成字符串的简单方法。然后你只需要添加一个空格,最后一个字:

$buffer .= ' '; 

,它是将一个空格字符,而不是最后(明显的,对吧?):

$buffer .= $last_word; 

带来的一切融合在一起。

快乐编码。

相关问题