2012-09-20 44 views
1

我想了解下面的PHP代碼。這裏是概述,在PHP中引用數組 - 問題

有2個陣列,其由在所述形式中,$ k個密鑰值對=> $ V

這2個陣列被合併在一起使用array_merge函數以形成所述第三陣列。

現在,這個數組被傳遞給一個函數。只有一個參數,數組名稱被傳遞。

下面是代碼(請注意,此代碼只是一個概念,而不是真正的代碼):

<?php  

function test(&$myArray, 0) 
{ 
    reset($myArray); 

    foreach ($myArray as $k => $v) 
    { 
     .... 
    } 
} 

$arr3 = array_merge((array) $arr1, (array) $arr2); 

test($arr3) 

} 

問題:

  1. 功能是這樣定義的,它期望兩個參數,但是我們只傳遞一個參數。是否因爲在函數原型中初始化第二個參數始終爲0?那麼,不需要傳遞相同數量的參數?
  2. 這裏傳遞數組名稱。我的猜測是,它會傳遞一個指向該函數的數組的第一個元素(內存中數組的基地址)的指針。

在這種情況下,如果您查看原型,數組名前面帶有一個&符號。那麼,這意味着,對數組的引用,地址?

  1. 爲什麼有必要調用陣列上的復位功能。是否因爲在測試函數之前調用了用於形成此數組的array_merge函數?所以,由於合併了$ arr1和$ arr2,它將第一個元素前面的數組中的指針移動了?

  2. 函數中沒有返回值,測試。那麼,它是否會修改內存本身中原始數組的值,因此不需要返回數組?

謝謝。

+0

這是一個任務或作業或問題? – Laurence

+1

此代碼不起作用;你錯過了sigils('&$ myArray'),你的函數參數列表中有一個'0',並且你有一個神祕的尾部大括號。 – nneonneo

+0

這只是一個概念性代碼(不是真正的代碼)。只有理解這個概念。 @ TheShiftExchange:不,這不是一項任務。我正在閱讀PHP文件的源代碼,並且遇到了類似的代碼,所以我想了解。謝謝。 –

回答

1
<?php 
function test($myArray,$a =0) //passing by value 
{ 
    reset($myArray); 
    return $myArray;   
} 

$arr3 = test($arr3); //call n store it back it in $arr3 

function test(&$myArray,$a =0) //passing by reference 
    { 
     reset($myArray); 

    } 
test($arr3); //just call; 

?> 
+0

嗨安吉林,謝謝你的代碼示例。所以,我的理解是正確的。當我們將它作爲參考傳遞時,不需要返回,因爲原始數組被修改(與C中的概念相同)。另外,你能否在我的問題中澄清第一點。您將測試函數的第二個參數設爲$ a = 0,但在調用函數時,我們只傳遞一個參數,爲什麼會這樣呢? –

+0

哦,它只是定義第二個參數的默認值並說它的opitonal的方法,如果你傳遞第二個參數,默認值將被覆蓋。所以,它不是強制性的以2個參數調用test()。 –

+0

非常感謝你:)來自印度的問候太:) –