2013-05-09 47 views
-4

为了能够在&之前直接修改循环内的数组元素。在这种情况下,价值将从http://php.net/manual/en/control-structures.foreach.php引用分配。什么是在PHP的foreach语句?

$arr = array(1, 2, 3, 4); 
foreach ($arr as &$value) { 
    echo $value; 
} 

$arr = array(1, 2, 3, 4); 
foreach ($arr as $value) { 
    echo $value; 
} 

在这两种情况下,输出1234是什么增加&至$值实际上呢? 任何帮助表示赞赏。谢谢!

+3

如何阅读手册条目的其余部分? – deceze 2013-05-09 18:51:30

+1

“reference”一词是指向http://www.php.net/manual/en/language.references.php的链接。阅读。 – Gumbo 2013-05-09 18:51:49

回答

0

在刚开始的时候学习这不是明摆着....

这里的,我希望会希望得到您的区别是什么一个更清晰的认识上按值传递,并通过将一个例子什么引用传递参考是...

<?php 
$money = array(1, 2, 3, 4); //Example array 
moneyMaker($money); //Execute function MoneyMaker and pass $money-array as REFERENCE 
//Array $money is now 2,3,4,5 (BECAUSE $money is passed by reference). 

eatMyMoney($money); //Execute function eatMyMoney and pass $money-array as a VALUE 
//Array $money is NOT AFFECTED (BECAUSE $money is just SENT to the function eatMyMoeny and nothing is returned). 
//So array $money is still 2,3,4,5 

echo print_r($money,true); //Array ([0] => 2 [1] => 3 [2] => 4 [3] => 5) 

//$item passed by VALUE 
foreach($money as $item) { 
    $item = 4; //would just set the value 4 to the VARIABLE $item 
} 
echo print_r($money,true); //Array ([0] => 2 [1] => 3 [2] => 4 [3] => 5) 

//$item passed by REFERENCE 
foreach($money as &$item) { 
    $item = 4; //Would give $item (current element in array)value 4 (because item is passed by reference in the foreach-loop) 
} 

echo print_r($money,true); //Array ([0] => 4 [1] => 4 [2] => 4 [3] => 4) 

function moneyMaker(&$money) {  
//$money-array is passed to this function as a reference. 
//Any changes to $money-array is affected even outside of this function 
    foreach ($money as $key=>$item) { 
    $money[$key]++; //Add each array element in money array with 1 
    } 
} 

function eatMyMoney($money) { //NOT passed by reference. ONLY the values of the array is SENT to this function 
    foreach ($money as $key=>$item) { 
    $money[$key]--; //Delete 1 from each element in array $money 
    } 
    //The $money-array INSIDE of this function returns 1,2,3,4 
    //Function isn't returing ANYTHING 
} 
?> 
6

它表示您通过引用传递$值。如果您在foreach循环中更改$值,您的数组将相应地进行修改。

没有它,它会通过值传递,无论您对$ value做什么修改都只会在foreach循环中应用。

0

这是对变量的引用,foreach循环中的主要用途是可以更改$ value变量,以及数组本身也将更改的方式。

0

当你只是引用值时,你不会注意到你发布的情况有很大的不同。最简单的例子,我可以想出通过参考通过描述与引用变量的区别是:

$a = 1; 
$b = &$a; 
$b++; 
print $a; // 2 

你会注意到一个$现在是2 - 因为$ b是指针为$ a。如果你没有前缀符号,美元将仍然是1:

$a = 1; 
$b = $a; 
$b++; 
print $a; // 1 

HTH

+0

感谢您的明确示例! :) – stackoverflower 2013-05-09 19:12:19

0

通常每个函数创建其参数的副本,与他们的工作,如果你不归还“删除它们”(发生这种情况取决于语言)。

如果使用&VARIABLE作为参数运行函数,这意味着您通过引用添加了该变量,事实上,即使没有返回该变量,该函数也能够更改该变量。