2014-10-09 35 views
-4

爲什麼下面的代碼返回數組值的第二個字符?爲什麼array_walk()函數的結果如此瘋狂?

$name = array("John","Frank","Peter"); 
function myFunction($name) { 
echo $name[1]; 
} 
array_walk($name,"myFunction"); //output ore 
+3

http://php.net/array_walk – oopbase 2014-10-09 18:31:48

+1

什麼辦法?爲什麼?另外你爲什麼要怪'array_walk'? – PeeHaa 2014-10-09 18:31:51

+0

你爲什麼認爲這樣做?你期望它做什麼? – 2014-10-09 18:32:00

回答

3

array_walk()傳遞到您的回調myFunction()$name陣列的每個值。 (變量$name你有你的回調是而不是相同的變量$name,你傳遞到array_walk()$name數組(在這種情況下)是全局範圍,而回調中的$ name`只在範圍內該功能)。然後,您明確地回顯出該變量字符串值的第二個字符。

the manual:字符串內

性狀可以通過指定被訪問和修改的零基礎使用正方形陣列括號後的字符串所需的字符的偏移,如在$ STR [42]。出於此目的,可以將字符串視爲一組字符。

// First iteration 
John 
^ 

// Second iteration 
Frank 
^ 

// Third iteration 
Peter 
^ 
+0

您可能想要解釋變量'$ name'的範圍。這可能會導致混淆。 – 2014-10-09 18:34:16

+0

@KlausByskovPedersen好主意。完成。 – 2014-10-09 18:37:51

+1

謝謝John的全面解釋 – KarenV 2014-10-09 18:53:00