我正在寻找一个函数,它可以找到具有相似名称的数组键并对其进行重命名。
示例:
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]);
}
}
}