php foreach 傳值還是傳引用

來源:互聯網
上載者:User

php中foreach()的用法

foreach()有兩種用法:

1:

 代碼如下 複製代碼
foreach(array_name as $value)
   {
      statement;
   }

這裡的array_name是你要遍曆的數組名,每次迴圈中,array_name數組的當前元素的值被賦給$value,並且數組內部的下標向下移一步,也就是下次迴圈回得到下一個元素。
 
2:

 代碼如下 複製代碼
foreach(array_name as $key => $value)
   {
       statement;
    }

這裡跟第一種方法的區別就是多了個$key,也就是除了把當前元素的值賦給$value外,當前元素的索引值也會在每次迴圈中被賦給變數$key。索引值可以是下標值,也可以是字串。比如book[0]=1中的“0”,book[id]="001"中的“id”.

看下面的例子:

 代碼如下 複製代碼

$arr = array(
    array('id' => 1, 'name' => 'name1'),
    array('id' => 2, 'name' => 'name2'),
);

foreach ($arr as $obj) {
    $obj['id'] = $obj['id'];
    $obj['name'] = $obj['name'] . '-modify';
}

print_r($arr); //輸出的結果
Array(
    [0] => Array (
        [id] => 1
        [name] => name1
    )
    [1] => Array(
        [id] => 2
        [name] => name2
    )
)

觀察可以發現在foreach迴圈中對$arr操作並沒有影響到$arr的元素,所以這裡的賦值是傳值而不是傳引用。那如果需要修改$arr中元素的值該怎麼辦呢?可以在變數前面加一個”&”符號,例如:

 代碼如下 複製代碼

foreach ($arr as &$obj) {
    $obj['id'] = $obj['id'];
    $obj['name'] = $obj['name'] . '-modify';
}

再看另外一個例子,array裡面存放的是object,

 代碼如下 複製代碼

$arr = array(
    (object)(array('id' => 1, 'name' => 'name1')),
    (object)(array('id' => 2, 'name' => 'name2')),
);

foreach ($arr as $obj) {
    $obj->name = $obj->name  . '-modify';
}

print_r($arr); //輸出的結果

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => name1-modify
        )

    [1] => stdClass Object
        (
            [id] => 2
            [name] => name2-modify
        )

)

此時可以看到原始數組中的object對象已經修改了,所以這裡的賦值又是傳引用而不是傳值

綜合上述,得出的結論:如果數組裡面存放的是普通類型的元素就是採用傳值的方式,存放物件類型元素採用的方式為傳地址。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.