我正在寻找一个函数来查找具有相似名称的数组键并重命名它。
例子:
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
)
)