Php 循环时操纵数组
因此,Php 循环时操纵数组,php,arrays,Php,Arrays,因此,$tr['tree']是一个数组$dic是存储为键值的数组。我想在这些数组中添加键source。下面的代码似乎没有按预期工作,因为我猜,$dic是$tr['tree']中数组对象的新实例 foreach($tr['tree'] as $dic){ $dic['source'] = $tr['source']." > ".$dic['name']; } 注意,我来自python,在那里这将非常有效。那么在PHP中如何实现这一点呢?foreach()会创建循环项的副本,因此循环
$tr['tree']
是一个数组$dic
是存储为键值的数组。我想在这些数组中添加键source
。下面的代码似乎没有按预期工作,因为我猜,$dic
是$tr['tree']
中数组对象的新实例
foreach($tr['tree'] as $dic){
$dic['source'] = $tr['source']." > ".$dic['name'];
}
注意,我来自python,在那里这将非常有效。那么在PHP中如何实现这一点呢?foreach()会创建循环项的副本,因此循环中的$dic
会与数组分离。如果要修改父数组,安全的方法是使用:
foreach($array as $key => $value) {
$array[$key] = $new_value;
}
您可以使用参考:
foreach($array as &$value) {
^---
$value = $new_value;
}
但这可能会导致以后很难找到错误<代码>$value在foreach终止后仍将作为引用。如果您稍后在其他内容中重复使用该变量名,您将修改数组,因为变量仍然指向它。foreach()创建循环项的副本,因此循环中的$dic
与数组分离。如果要修改父数组,安全的方法是使用:
foreach($array as $key => $value) {
$array[$key] = $new_value;
}
您可以使用参考:
foreach($array as &$value) {
^---
$value = $new_value;
}
但这可能会导致以后很难找到错误<代码>$value在foreach终止后仍将作为引用。如果您稍后在其他内容中重复使用该变量名,您将修改数组,因为变量仍然指向它。添加一个符号,告诉php它应该通过引用循环,例如,
foreach($tr['tree']as&$dic)
。这是您的出发点:添加它作为答案,我将投票并接受它:)我认为这是一个非常好的答案:添加一个符号并告诉php它应该通过引用循环,例如,foreach($tr['tree']as&$dic)
。这是你的出发点:加上这个作为答案,我会投赞成票并接受它:)我认为这是一个很好的例子:对于奇怪的行为:这是一个很好的例子。(如果您想“更深入”了解它如何与is_ref
等一起工作:)(在我给出的示例中,我需要修改子数组。有什么安全的方法?$array[$key][$childkey]
…因为您正在处理分配的原始数组,所以不管您在循环中如何/做什么,您都将修改“real”当然,如果你开始做一些愚蠢的事情,比如在$array
本身中添加/删除内容,那么你就开始输入undefinedterritory@MarcB不一定是未定义->您只需要知道PHP对这种奇怪的行为做了什么:这是一个很好的例子。(如果您想“更深入”它如何与一起工作是_ref
等等:)(在我给出的示例中,我需要修改子数组。有什么安全的方法呢?$array[$key][$childkey]
…因为您正在处理分配的原始数组,所以无论您在循环中如何/做什么,您都将修改“real”当然,如果你开始做一些愚蠢的事情,比如在$array
本身中添加/删除内容,那么你就开始输入undefinedterritory@MarcB不一定是未定义->您只需要知道PHP的功能