0
foreach ($bing_array as $bing_array_val)
{       
    foreach ($final_array as $final_array_val)
    {
        if ($final_array_val["link"] == $bing_array_val["link"])
        {

            $final_array_val["rank"] += $bing_array_val["rank"];
        }
    }
}

上面的代码有两个 foreach 循环,它们是嵌套的。

它应该针对每个 final_array["link"] 测试每个 bing_array["link"],如果它们相同,则 final_array["rank"] 值应该是 += bing_array["rank"] 但是当我回显 final_array 时, ["rank"] 值不变。

我认为这是一个语法问题,我哪里出错了?

谢谢

4

2 回答 2

1

您需要使用参考语法(&前缀):

foreach ($final_array as &$final_array_val)
{
}
unset($final_array_val);

请注意,unset需要中断对最后一个值的引用。在这里阅读更多。

于 2013-07-02T22:03:36.173 回答
1

这是您需要的实际代码:

foreach ($bing_array as &$bing_array_val)
{       
    foreach ($final_array as &$final_array_val)
    {
        if ($final_array_val["link"] == $bing_array_val["link"])
        {
            $final_array_val["rank"] += $bing_array_val["rank"];
        }
    }
    unset(&$final_array_val);
}
unset(&$bing_array_val);

在您的初始代码中,每次循环 $final_array 时,它都会创建一个名为 $final_array_val 的临时值,其中包含内容。然后,您对其进行了修改,然后每次出现 foreach 时都将其替换。

通过引用传递变量,而不是在 foreach 中创建新的临时变量,您可以使用实际变量来保留您对其所做的修改。

于 2013-07-02T22:12:33.970 回答