PHP:替换数组值';不要停留在foreach循环之后
我正在改变多维数组中的值,它不会停留在用于遍历它的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']
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;
}