要获取组织名称并将其缩写,其变体会省略单词“ of”和“ and”,但也将其包括在其他变体中

时间:2019-08-14 06:42:02

标签: php arrays string algorithm

我需要获取在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
)

1 个答案:

答案 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
)

Demo on 3v4l.org