嵌套的foreach循环,PHP,我该如何操纵值?

时间:2013-07-02 22:00:13

标签: php foreach associative-array

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”]值不变。

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

由于

2 个答案:

答案 0 :(得分:1)

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

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

请注意,unset需要断开对最后一个值的引用。阅读更多here

答案 1 :(得分: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中创建一个新的临时变量,而是使用实际变量来保存你对它所做的修改。