4

2 つの文字列を比較して、それらの差をパーセントで表してください。

次のような2つの文字列がありました:

first string:
253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,253.0.0.0,247.0.0.24,197.0.0.35,189.0.0.98....
second string:
255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127,255.255.255.127....

$first_array = explode(",", $out_string);
$second_array = explode(",", $out_string_1);
$result_array = array_merge(array_diff($first_array, $second_array), array_diff($second_array, $first_array));

$result = implode(",",$result_array);
echo $result;
4

3 に答える 3

5

この目的のために、similar_text()levenshtein()という 2 つの興味深いネイティブ関数があります。

similar_text() の例:

$string1 = 'AAAb';
$string2 = 'aaab';

similar_text ( $string1, $string2, $percentege );

echo $percentege . '%'; // Output: 25%

levenshtein() の例:

levenshtein($string1, $string2, 1, 1000, 1000000);

編集1

最初の文字列には常に 2 番目の文字列と同じ数のエントリがあることを考慮して、以下のコードを試すことができます。テスト用に 2 つの文字列を作成しました。2 番目の文字列には 2 つの等しいエントリと 7 つの異なるエントリがあり、合計 9 です。

$first_string = '253.0.0.1,253.0.0.2,253.0.0.3,253.0.0.4,253.0.0.5,253.0.0.6,253.0.0.7,253.0.0.8,253.0.0.9';

$second_string = '253.0.0.1,253.0.0.2,255.255.255.127,255.255.255.128,255.255.255.129,255.255.255.130,255.255.255.131,255.255.255.132,255.255.255.133';

$first_array = explode(',', $first_string);

$second_array = explode(',', $second_string);

$total_entries = count($first_array);

$array_differences = array_diff($first_array, $second_array);

$different_entries = count($array_differences);

$percentage = ( $different_entries / $total_entries ) * 100 ;

echo 'Difference: ' . round($percentage, 2) . '%';
于 2012-11-04T15:04:45.383 に答える
1

簡単なのはどうですか...

$difference = count($result_array) / count($first_array) * 100;

例えば:

$arr1 = array(1, 2, 3, 4);
$arr2 = array(5, 2, 4, 8);
$res  = array_diff($arr1, $arr2); 
printf("%.02f%%", count($res) / count($arr1) * 100);    # 50.00%
于 2012-11-04T15:00:05.167 に答える
1

類似度関数は、実装されるコンテキストに大きく依存します。比較の結果 (つまり、コンテキスト) で何をしたいのかについての説明がなければ、すぐに使用できる類似関数を提供することはほとんど不可能です。私が考えることができる類似関数はすべて有効である可能性がありますが、どれもあなたの問題に適していません.

于 2012-11-04T16:07:36.603 に答える