PHP自定义函数代码优化

PHP自定义函数代码优化,php,arrays,optimization,Php,Arrays,Optimization,现在是最难的部分。如何优化此功能: function coin_matrix($test, $revs) { $coin = array(); for ($i = 0; $i < count($test); $i++) { foreach ($revs as $j => $rev) { foreach ($revs as $k => $rev) { if ($j != $k &&

现在是最难的部分。如何优化此功能:

function coin_matrix($test, $revs) {
    $coin = array();

    for ($i = 0; $i < count($test); $i++) {
        foreach ($revs as $j => $rev) {
            foreach ($revs as $k => $rev) {
            if ($j != $k && 
                $test[$i][$j] != null && 
                $test[$i][$k] != null) {
                    if(!isset($coin[$test[$i][$j]])) {
                        $coin[$test[$i][$j]] = array(); 
                    }
                    if(!isset($coin[$test[$i][$j]][$test[$i][$k]])) {
                        $coin[$test[$i][$j]][$test[$i][$k]] = 0; 
                    }

                    $coin[$test[$i][$j]][$test[$i][$k]] += 1 / ($some_var - 1);
                }
            }
        }
    }
    return $coin;
}
功能硬币矩阵($test,$revs){
$coin=array();
对于($i=0;$i$rev){
foreach($k=>$rev){
如果($j!=$k&&
$test[$i][$j]!=null&&
$test[$i][$k]!=null){
如果(!isset($coin[$test[$i][$j]])){
$coin[$test[$i][$j]]=array();
}
如果(!isset($coin[$test[$i][$j][$test[$i][$k]])){
$coin[$test[$i][$j][$test[$i][$k]]=0;
}
$coin[$test[$i][$j][$test[$i][$k]]+=1/($some_var-1);
}
}
}
}
退回元硬币;
}
我不太擅长这个,如果阵列很大,它将永远运行

该函数应该从一个二元数组中找到所有的值对,并按如下方式求和:
$coin[$i][$j]+=sum\u of_pairs\u in_array\u row/[count(elements\u of_row)-1]


非常感谢

如果您真的需要运行阵列中3个项目的所有组合,那么在涉及大型阵列时,您通常会陷入困境。最主要的因素是你的函数是立方的,你无法改变这个事实,即随着输入的增加,输出时间会以天文数字的方式增加。您可能可以将时间减少到(比如)现在的30%,但是如果时间已经是3周,那么1周的运行时间对您几乎没有什么帮助

尽管如此,您仍然可以在最内部的循环中节省一些精力。如果我正确地解释了您的代码,您可以在每个I-j组合中只设置一次
$coin[$I][$j]=array()
,而不是检查尚未设置的每个k项


也就是说,现在还不完全清楚这个函数应该做什么,所以我不能完全自信地提供其他编辑,除了使用
$coin
而不是
coin
,以节省PHP解析器的一点工作量。

我不知道为什么之前没有指出这一点: 更改:

最后,我仍然不确定这应该做什么。也许你可以提供一些好的输入和输出值。因为你所说的目的仍然没有意义。什么是$revs,为什么是:

$coin[$i][$j] += sum_of_pairs_in_array_row / [count(elements_of_row) - 1]
而不是:

$coin[$row] += sum_of_pairs_in_array_row / [count(elements_of_row) - 1]

我只是想学习,不过还是要谢谢你的否决票。这个函数应该做什么?有时一个代码示例会走很长的路,但有时一个清晰的英文描述会走得更远。这么多美元,以至于我认为我赢了头奖。。。chachingit为Krippendorff的阿尔法计算重合矩阵。函数应该返回的数组中每个元素的确切公式如下:返回矩阵(数组)的每个元素都是Ock,并根据上面链接中的公式进行计算。这是未中断的链接:if语句中仍然有两个。是的,谢谢!也更正了。有关函数背后公式的说明,请参见上面的注释。该函数计算Krippendorffα的符合矩阵。函数应该返回的矩阵中每个元素的精确公式如下:(wikipedia链接)$test是一个二维矩阵,$revs是一个向量,$revs中的键与$test的行号一致
$coin[$test[$i][$j]][$test[$i][$k]] += 1 / ($some_var - 1);
$coin[$i][$j] += sum_of_pairs_in_array_row / [count(elements_of_row) - 1]
$coin[$row] += sum_of_pairs_in_array_row / [count(elements_of_row) - 1]