嵌套的foreach循环,PHP,如何操作这些值?

嵌套的foreach循环,PHP,如何操作这些值?,php,foreach,associative-array,Php,Foreach,Associative Array,上面的代码有两个foreach循环,它们是嵌套的 它应该测试每个bing_数组[“link”]和每个final_数组[“link”],如果它们相同,final_数组[“rank”]的值应该是+=bing_数组[“rank”],但当我回显final_数组时,[“rank”]的值不变 我假设这是一个语法问题,我错在哪里 谢谢您需要使用参考语法(&前缀): 请注意,unset需要断开对最后一个值的引用。阅读更多信息。以下是您需要的实际代码: foreach ($final_array as &

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

它应该测试每个bing_数组[“link”]和每个final_数组[“link”],如果它们相同,final_数组[“rank”]的值应该是+=bing_数组[“rank”],但当我回显final_数组时,[“rank”]的值不变

我假设这是一个语法问题,我错在哪里


谢谢

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


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

以下是您需要的实际代码:

foreach ($final_array as &$final_array_val)
{
}
unset($final_array_val);
在初始代码中,每次在$final_数组上循环时,都会创建一个名为$final_数组_val的临时值,其中包含内容。然后,您修改了它,然后每次foreach出现时它都被替换


通过引用传递变量,而不是在foreach中创建一个新的临时变量,您将使用实际变量,该变量将保留您对它所做的修改。

向我们展示
$bing\u array
$final\u array
。哇,我在很多echo语句中不需要它,但现在它可以用于操作了!在操作引用的数组而不是打印它时,是否需要这样做?我认识到&从C++中,只有当您要修改值时才需要它。请注意,我不建议您为
bing_array
执行此操作,因为您没有修改它。谢谢,鉴于父foreach将多次调用子foreach,并且可能会多次创建和取消设置引用变量,我是否应该在父foreach循环之后而不是在子foreach之后立即取消设置它?谢谢在外循环之后,您只需要执行一次。该变量一次只能指向一个位置,因此,如果要再次设置,则无需取消设置该变量。但这不会伤害你。当一个值被直接清除时,读取代码通常更清晰。是的,您可以。这是我讨厌PHP的一个地方——能够创建一个新变量,该变量在创建它的作用域块之外保持不变。我来自C和C++背景,所以我仍然在我想要的范围内定义变量(例如在循环之前)。这让所有读者都清楚地知道,我打算在循环之外使用这个变量。这也是一种很好的做法,以防数组为空,并且从不循环。你仍然可以保证变量有一个值,你不必使用
isset
。非常感谢,我用@paddy的答案破解了它,但这是我做的,谢谢!我理解C++的参考变量,所以能够继续!
foreach ($final_array as &$final_array_val)
{
}
unset($final_array_val);
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);