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]