-1

類似した名前の配列キーを見つけて名前を変更する関数を探しています。

例:

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
        )

)
4

1 に答える 1

0

たぶん次のようなもの:

$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]);
        }
    }
}
于 2014-10-21T09:23:07.517 に答える