Найдите ключи Array с похожими именами и переименуйте их

Я ищу функцию, которая находит ключи массива с похожими именами и переименовывает его.

Пример:

Array('Joes house' => 'some text', 'Joe`s House' => 'more Text', 'Bob' => 'text...')

Результат:

Array('New Key' => 'some text', 'New Key' => 'more Text', 'Bob' => 'text...')

Я думаю о смеси этих функций:

array_keys($array)
similar_text($word1' $word2)

В цикле foreach.

Есть идеи?
Большое спасибо!

РЕДАКТИРОВАТЬ :

В первом посте я забыл, что внутри моего массива есть под-массив …
Я построил свою функцию сейчас. Это хороший способ сделать эту работу или есть более эффективный способ?

$array = array('Joe\'s House' => array('ABB', 'CDE'), 'Joes Pizza' => 'GDU', 'Jims House' => 'RDS', 'Joe Horse' => 'ABB', 'Joes Housee' => 'HCT');

echo "<pre>Original ";
print_r($array);
echo "</pre>";

$keys = array_keys($array);
$first = null;
$filter = array();
$add = array();

foreach($keys as $key) {
foreach($keys as $check) {
similar_text($key, $check, $percent);
if($percent > 90 && $key != $check) {
//Buffer first similar array key
if(empty($first)) {
$first = $key;
}
// build filter array
$filter[$check] = $array[$check];
// build add array
if(is_array($array[$check])) {
$add[$first] = array_merge($add[$first], $array[$check]);
}
else {
$add[$first][] = $array[$check];
}
}
}
}

$array = array_diff($array, $filter);
$result = array_merge($array, $add);

echo "<pre>To delete ";
print_r($filter);
echo "<pre>To add ";
print_r($add);
echo "Final filtered ";
print_r($result);
echo "</pre>";

Вывод выглядит так:

Original Array
(
[Joe's House] => Array
(
[0] => ABB
[1] => CDE
)

[Joes Pizza] => GDU
[Jims House] => RDS
[Joe Horse] => ABB
[Joes Housee] => HCT
)

To delete Array
(
[Joes Housee] => HCT
[Joe's House] => Array
(
[0] => ABB
[1] => CDE
)

)

To add Array
(
[Joe's House] => Array
(
[0] => HCT
[1] => ABB
[2] => CDE
)

)

Final filtered Array
(
[Joes Pizza] => GDU
[Jims House] => RDS
[Joe Horse] => ABB
[Joe's House] => Array
(
[0] => HCT
[1] => ABB
[2] => CDE
)

)

-1

Решение

Может быть что-то вроде:

$array = array('Joes house' => 'some text', 'Joe`s House' => 'more Text');
$keys = array_keys($array);
foreach($keys as $key) {
$key_size = strlen($key);
foreach($keys as $check) {
if(((similar_text($key, $check) / $key_size) * 100) > 80 && $key != $check) {
echo '80% MATCH!';
//Create new array item
$array['new_key'] = $array[$check];
//Delete old array item
unset($array[$check]);
}
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector