Ну, ваш пример показывает, что вам нужно нечто большее, чем просто правильное использование заглавных букв (например, добавление запятых или удаление ненужных дефисов).Поэтому я бы сделал следующее:
- создайте «общий формат», в который вы можете конвертировать как правильно отформатированные, так и неправильно отформатированные заголовки.Я думаю, что лучше всего использовать строчные буквы + без синтаксиса (заменить пробелами);
преобразовать ваш ввод в "общий формат", например
interational business machines inc
для каждого из известных заголовков преобразуйте в «общий формат» и, если он совпадает с вашим преобразованным вводом, выведите этот заголовок
Итак, 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