我一直在阅读手册,找到一个可以完成我想要的功能,但我最终自己做了。我想比较两个数组并计算键之间的差异。或者更实际地分析值的顺序差异。
我这样做了如下,但我觉得这可以做得更好。
如果有人知道如何改进这一点,请告诉我,因为我渴望改进。
<?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 />";
}
答案 0 :(得分:1)
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
并使用&#34;倒排索引&#34;取而代之的是第一个数组:
foreach($a as $pos => $val)
$inv[$val] = $pos;
或只是
$inv = array_flip($a);
然后
foreach($b as $pos => $val)
$score += abs($pos - $inv[$val]);