Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 循环时操纵数组_Php_Arrays - Fatal编程技术网

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的功能