Корпус метафона может также следовать той же структуре, предложенной Майком для строгого случая.
Я не думаю, что необходима дополнительная функция сходства, потому что цель метафона должна состоять в том, чтобы дать нам ключ, который является общим для слов, которые звучат одинаково.
$array1 = array('India','USA','China');
$array2 = array(
'Indiuh is in east',
'United States of America is USA',
'Gandhi was born in India',
'Made in China'
);
$found = array();
foreach ($array1 as $key => $value) {
$found[$value] = preg_grep('/\b'.$value.'\b/i', $array2);
}
var_export($found);
echo "\n\n";
function meta( $sentence )
{
return implode(' ', array_map('metaphone', explode(' ', $sentence)));
}
$array2meta = array_map('meta', $array2);
foreach ($array1 as $key => $value) {
$valuemeta = meta($value);
$foundmeta[$value] = preg_grep('/\b'.$valuemeta.'\b/', $array2meta);
$foundmeta[$value] = array_intersect_key($array2, $foundmeta[$value]);
}
var_export($foundmeta);
Вышеприведенный код распечатывается:
array (
'India' =>
array (
2 => 'Gandhi was born in India',
),
'USA' =>
array (
1 => 'United States of America is USA',
),
'China' =>
array (
3 => 'Made in China',
),
)
array (
'India' =>
array (
0 => 'Indiuh is in east',
2 => 'Gandhi was born in India',
),
'USA' =>
array (
1 => 'United States of America is USA',
),
'China' =>
array (
3 => 'Made in China',
),
)