我需要获取在PHP中作为字符串提供给我的组织名称,并使用相同顺序的每个单词的首字母缩写该名称。如果存在诸如“ of”或“ and”之类的词,则需要显示缩写词,带或不包括这两个词的首字母。另外,我需要省略重复的缩写。
<?php
function splort($org){
$org_arr = explode(' ',$org);
$abbr1 = '';
$abbr2 = '';
$abbr_arr = array();
foreach($org_arr as $word){
$abbr1 .= $word[0];
if(strtolower($word) == 'of')
continue;
$abbr2 .= $word[0];
}
if($abbr1 == $abbr2) array_push($abbr_arr,$abbr1);
else array_push($abbr_arr,$abbr1,$abbr2);
return $abbr_arr;
}
print_r(splort("State Bank of India"));
以上代码仅管理一个单词,即'of'。我也需要注意“和”这个词。上面的代码仅产生两个变化,这是预期的。 “ SBoI”和“ SBI”。
如果组织名称为“印度国家银行”,则可能是以下缩写:
SBI
SBoI
SBaI
斯波阿伊
更新
我还被分配了一个任务,如果它仅由单词组成,则返回组织名称的前三个字母。我还应该返回组织中所有单独的单词。
我在回答这个问题之前就已经编写了此代码,因为它已被搁置。请看看并提出改进建议。
<?php
function split_and_shorten($org){
$org_t = trim($org);
$org_arr = explode(" ", $org_t);
if(count($org_arr) > 1){
$abbr1 = "";
$abbr2 = "";
$abbr3 = "";
$abbr4 = "";
foreach($org_arr as $word){
$abbr1 .= $word[0];
if (strtolower($word) != 'of')
$abbr2 .= $word[0];
if (strtolower($word) != 'and')
$abbr3 .= $word[0];
if (strtolower($word) == 'of' || strtolower($word) == 'and')
continue;
$abbr4 .= $word[0];
}
array_push($org_arr, $abbr1, $abbr2, $abbr3, $abbr4);
}
else {
$short = substr($org_arr[0], 0, 3);
array_push($org_arr, $short);
}
return array_unique($org_arr);
}
print_r(split_and_shorten("State Bank of and India"));
输出:
Array
(
[0] => State
[1] => Bank
[2] => of
[3] => and
[4] => India
[5] => SBoaI
[6] => SBaI
[7] => SBoI
[8] => SBI
)
答案 0 :(得分:1)
这是一个可以执行您想要的功能的函数。它需要一个单词字符串和一个停用词列表。如果单词不是停用词,则将其首字母添加到列表中的每个缩写中。如果它是一个停用词,则缩写列表会重复,并向其中添加获取停用词首字母的新缩写。
function splort($org, $stop_words) {
$words = explode(' ', $org);
$abbrevs = array('');
foreach ($words as $word) {
if (in_array($word, $stop_words)) {
// create a new set of abbreviations with this word's initial included
$new_abbrevs = array();
foreach ($abbrevs as $abbrev) {
$new_abbrevs[] = $abbrev . $word[0];
}
// merge the arrays
$abbrevs = array_merge($abbrevs, $new_abbrevs);
}
else {
// add the initial to each abbreviation
foreach ($abbrevs as &$abb) {
$abb .= $word[0];
}
}
}
return $abbrevs;
}
$stop_words = array('of', 'and');
print_r(splort('State Bank of and India', $stop_words));
输出:
Array
(
[0] => SBI
[1] => SBoI
[2] => SBaI
[3] => SBoaI
)