找到名称相似的数组键并重命名它


Find Array keys with similar names and rename it

我正在寻找一个函数,它可以找到具有相似名称的数组键并对其进行重命名。

示例:

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

也许类似于:

$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]);
        }
    }
}