I am not sure where you are deriving these desired percentages, so I'll just use the values that the php functions churn out and you can decide if you want to perform any calculations on them.
levenshtein()
simply doesn't deliver the desired matches that you have requested in your question. I think you would be wiser to use similar_text()
.
Code: (Demo)
$arrayA=['Red','Black','White','Green'];
$arrayB=['Blackwell','Purple','Whitewater','Reddit'];
// similar text
foreach($arrayA as $a){
$temp=array_combine($arrayB,array_map(function($v)use($a){similar_text($v,$a,$percent); return $percent;},$arrayB)); // generate assoc array of assessments
arsort($temp); // sort descending
$result[]="$a is most similar to ".key($temp)." (sim-score:".number_format(current($temp))."%)"; // access first key and value
}
var_export($result);
echo "\n--\n";
// levenstein doesn't offer the desired matching
foreach($arrayA as $a){
$temp=array_combine($arrayB,array_map(function($v)use($a){return levenshtein($v,$a);},$arrayB)); // generate assoc array of assessments
arsort($temp); // sort descending
$result2[]="$a is most similar to ".key($temp)." (lev-score:".current($temp).")"; // access first key and value
}
var_export($result2);
Output:
array (
0 => 'Red is most similar to Reddit (sim-score:67%)',
1 => 'Black is most similar to Blackwell (sim-score:71%)',
2 => 'White is most similar to Whitewater (sim-score:67%)',
3 => 'Green is most similar to Purple (sim-score:36%)',
)
--
array (
0 => 'Red is most similar to Whitewater (lev-score:9)',
1 => 'Black is most similar to Whitewater (lev-score:9)',
2 => 'White is most similar to Blackwell (lev-score:8)',
3 => 'Green is most similar to Blackwell (lev-score:8)',
)