我一直在通读手册,以找到可以实现所需功能的函数,但最终还是自己完成了。我想比较两个数组并计算键之间的差异。或者更实际地分析值顺序的差异。
我已按照以下步骤进行操作,但是我觉得可以做得更好。
如果有人对如何改善此问题有任何想法,请立即告诉我,因为我渴望改善。
<?php
$goodarray = array(300,250,200,150,100);
$usersupliedarray = array(250,300,200,150,100); // first two spots are wrong
$score = count($goodarray);
foreach($usersupliedarray as $key => $value){
$arraykey = array_search($value, $goodarray);
$difference = abs($key-$arraykey);
$score = $score + $difference;
echo "$value $goodarray[$key] ($difference = $score) <hr />";
}
array_map
例如,使用无效的回调可以派上用场,
$a = array(300,250,200,150,100);
$b = array(250,300,200,150,100);
$faults = 0;
foreach(array_map(null, $a, $b) as $x)
$faults += $x[0] != $x[1]; // x[0] is $a element, x[1] is $b
print $faults; // 2
UPD:如果您想计算相等元素之间的距离,而不仅仅是计算差异,那么您的原始代码对我来说就很好。可以进行的一项改进是摆脱效率低下的问题array_search
,而使用第一个数组的“倒排索引”:
foreach($a as $pos => $val)
$inv[$val] = $pos;
要不就
$inv = array_flip($a);
接着
foreach($b as $pos => $val)
$score += abs($pos - $inv[$val]);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句