PHP правильный формат названия компании - PullRequest
0 голосов
/ 27 октября 2018

У меня есть названия компаний, такие как:

  • Wal-Mart Stores, Inc

  • Эксон Мобил Корпорейшн

  • Chevron Corporation

  • Berkshire Hathaway Inc.

  • Apple Inc.

и многое другое.

Мне нужно взять в качестве ввода возможно неформатированное название компании, например:

interational Business Machines inc

и дать правильно отформатированное имя в качестве вывода, например

International Business Machines, Inc.

Как мне добиться этого в php? Сопоставляя входную переменную со всеми остальными? Мне нужно что-то, что может помочь мне начать

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Ну, ваш пример показывает, что вам нужно нечто большее, чем просто правильное использование заглавных букв (например, добавление запятых или удаление ненужных дефисов).Поэтому я бы сделал следующее:

  1. создайте «общий формат», в который вы можете конвертировать как правильно отформатированные, так и неправильно отформатированные заголовки.Я думаю, что лучше всего использовать строчные буквы + без синтаксиса (заменить пробелами);
  2. преобразовать ваш ввод в "общий формат", например

    interational business machines inc
    
  3. для каждого из известных заголовков преобразуйте в «общий формат» и, если он совпадает с вашим преобразованным вводом, выведите этот заголовок

Итак, 1:

function convertToCommonFormat($input) {

    $lowerCasedInput = mb_strtolower($input,'UTF-8');

    // substitute with spaces, don't remove, otherwise Wal-Mart will become WalMart
    // while Wal Mart will remain Wal Mart, so they won't match
    $clearedInput = preg_replace('/[,\.\-]/',' ',$lowerCasedInput); // add more symbols to the regexp, if there can be some.. may be !, \? should be added as well

    // since "Machines, Inc." will become "Machines  Inc ", you have to deal with it
    $clearedInput = preg_replace('/ +/',' ',$clearedInput); // shrink more than 1 space
    return preg_replace('/ $/','',$clearedInput); // trim a space in the end
}

и 2-3

foreach($knownNames as $name)
    if(convertToCommonFormat($input) == convertToCommonFormat($name))
        return $name; // known company
return $input; // or null to point that the company is unknown

или лучше

$inputInCommonFormat = convertToCommonFormat($input);
foreach($knownNames as $name)
    if($inputInCommonFormat == convertToCommonFormat($name))
        return $name; // known company
return $input; // or null to point that the company is unknown
0 голосов
/ 27 октября 2018

Зацикливайте ваш массив названий компаний и используйте ucwords, чтобы сделать их верблюжьими.

foreach($arr as &$name){
     $name = ucwords($name);
}
unset($name);

ucwords

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...