Php 这个foreach会复制内存中的值吗?

Php 这个foreach会复制内存中的值吗?,php,Php,例如: foreach ($veryFatArray as $key => $value) { foreach是通过引用$value来分配$key后面的值,还是$value是数组中存储内容的副本?如果是的话,我怎么能只得到推荐人呢?数组值存储了相当大的数据量,因此复制它们不是很好。$value将是一个副本,但是如果我在这里出错,请有人纠正我,PHP实际上在传递值类型方面非常聪明。实际上,它将执行按引用传递,并且只有在修改变量时才进行复制。例如: function foo ($bar) {

例如:

foreach ($veryFatArray as $key => $value) {
foreach是通过引用$value来分配$key后面的值,还是$value是数组中存储内容的副本?如果是的话,我怎么能只得到推荐人呢?数组值存储了相当大的数据量,因此复制它们不是很好。

$value将是一个副本,但是如果我在这里出错,请有人纠正我,PHP实际上在传递值类型方面非常聪明。实际上,它将执行按引用传递,并且只有在修改变量时才进行复制。例如:

function foo ($bar) {
    echo $bar['x'];
    // internally, $bar is a reference to $baz. (virtually) no extra memory used
    $bar['y'] = 'Y';
    // only now has the array been copied in memory
}

$baz = array('x' => '1', 'y' => '2');
foo($baz);
在foreach中,如果要修改原始数组,可以执行以下操作:

// PHP 4
foreach (array_keys($veryFatArray) as $key) {
    $value =& $veryFatArray[$key];
    // ...
}

// PHP 5
foreach ($veryFatArray as $key => &$value) { }
如果您只读取$value而不向其写入,那么应该不会有问题。

$value将是一个副本,但如果我在这里出错,请有人纠正我,PHP实际上在传递值类型方面非常聪明。实际上,它将执行按引用传递,并且只有在修改变量时才进行复制。例如:

function foo ($bar) {
    echo $bar['x'];
    // internally, $bar is a reference to $baz. (virtually) no extra memory used
    $bar['y'] = 'Y';
    // only now has the array been copied in memory
}

$baz = array('x' => '1', 'y' => '2');
foo($baz);
在foreach中,如果要修改原始数组,可以执行以下操作:

// PHP 4
foreach (array_keys($veryFatArray) as $key) {
    $value =& $veryFatArray[$key];
    // ...
}

// PHP 5
foreach ($veryFatArray as $key => &$value) { }

如果你只是读$value而不是写$value,那么这应该不会是一个问题。

不要试图猜测解释器是故事的寓意所在$值实际上是一个副本,但却是一个有效副本。PHP对非对象使用传递值,但也使用写时复制。这意味着如果你写:

foreach ($bigitems as $bigitem) {
  echo $bigitem;    // uses original
  $bigitem = 'foo'; // item copied and assigned 'foo'
  echo $bigitem;    // uses copy
}
只需声明您的意图:您希望使用数组值。之后让PHP来解决它。如果要更改数组,基本上只在循环中使用这样的引用。否则,您将向读取您的代码的其他人发送错误的消息


第1节应该告诉你所有你想知道的关于PHP书面拷贝的事情。

不要试图猜测解释器是故事的寓意所在$值实际上是一个副本,但却是一个有效副本。PHP对非对象使用传递值,但也使用写时复制。这意味着如果你写:

foreach ($bigitems as $bigitem) {
  echo $bigitem;    // uses original
  $bigitem = 'foo'; // item copied and assigned 'foo'
  echo $bigitem;    // uses copy
}
只需声明您的意图:您希望使用数组值。之后让PHP来解决它。如果要更改数组,基本上只在循环中使用这样的引用。否则,您将向读取您的代码的其他人发送错误的消息

第1节应该告诉您所有您想知道的关于PHP书面拷贝的信息。

FYI:FYI: