PHP:替换数组值';不要停留在foreach循环之后

PHP:替换数组值';不要停留在foreach循环之后,php,multidimensional-array,foreach,Php,Multidimensional Array,Foreach,我正在改变多维数组中的值,它不会停留在用于遍历它的foreach循环之外 我的阵列最初看起来像这样: Array { [0] => Array { [name] => Bob [age] => 33 [state] => CA [visited] => 0 } ... } 我的PHP通过以下方式进入: foreach ($people as $person){ echo $person['name']

我正在改变多维数组中的值,它不会停留在用于遍历它的foreach循环之外

我的阵列最初看起来像这样:

Array
{
  [0] => Array
   {
     [name] => Bob
     [age] => 33
     [state] => CA
     [visited] => 0
   }
   ...
}
我的PHP通过以下方式进入:

foreach ($people as $person){
 echo $person['name']
 ....
 logic for the visited variable
 ...
 $person['visited'] = $calculated_visit_value;
}
如果我

在foreach循环的末尾(但在内部),一切看起来都很好,设置了visted的值。但是,如果我
print\r($people)
在循环之外,则不会设置
$person['visted']
。我不知道我做错了什么


非常感谢您的帮助。

您正在从for循环中创建一个名为
$person
的新变量,您的数组将永远看不到该新变量的范围

您可以尝试通过引用传递它,如下所示:

foreach ($people as &$person){
 echo $person['name'];
 ....
 logic for the visited variable
 ...
 $person['visited'] = $calculated_visit_value;
}

$person
数组是在每次迭代时生成的,因此该值的设置将在下一次遍历时被覆盖

但即便如此,该数组仅在循环期间存在。您应该在循环之前创建另一个数组,并在循环期间将值放入该数组。

来源:

除非引用数组,否则foreach将对 指定的数组,而不是数组本身。foreach也有它的一面 对数组指针的影响。在执行过程中不要依赖数组指针 或者在foreach之后,不重置它

这意味着$person变量是数组中变量的副本,与此代码的效果类似(请注意,此代码仅用于理解,在许多级别上是错误的,实际上,您将使用reset()、current()和next()函数在数组上正确循环,):

请注意,当foreach循环结束时,引用不会被清除,因此在它结束时,$person仍然是对$people最后一个元素的引用。 如果您不知道什么是推荐信,请参阅以了解更多信息

或使用密钥访问原始阵列:

foreach ($people as $person_index => $person) {
  $people[$person_index] = $calculated_visit_value;
}
供您参考,您可以将两者结合使用

foreach ($people as $person_index => &$person { ...
正如前面所说,“您正在for循环中创建一个名为$person的新变量,您的数组将永远看不到该新变量的范围。”

我发现这个解决方案更健壮:

foreach ($people as $key => $person)
{
  echo $person['name']; 

  //logic for the visited variable

  $people[$key]['visited']=$calculated_visit_value;
}

您正在编辑foreach制作的数组副本(作为$…)是的,就是这样!非常感谢。我需要等待7分钟才能将其标记为正确答案,但这非常有效。这非常有效,应该标记为正确答案。
foreach ($people as $person_index => $person) {
  $people[$person_index] = $calculated_visit_value;
}
foreach ($people as $person_index => &$person { ...
foreach ($people as $key => $person)
{
  echo $person['name']; 

  //logic for the visited variable

  $people[$key]['visited']=$calculated_visit_value;
}