比较PHP中的两个数组并获得密钥的差异

时间:2014-10-19 17:17:00

标签: php arrays

我一直在阅读手册,找到一个可以完成我想要的功能,但我最终自己做了。我想比较两个数组并计算键之间的差异。或者更实际地分析值的顺序差异。

我这样做了如下,但我觉得这可以做得更好。

如果有人知道如何改进这一点,请告诉我,因为我渴望改进。

<?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 />";

}

1 个答案:

答案 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]);