2011-01-29 94 views
2

全局更改數組值,我需要調用一個函數來更改數組中的某個值。 但是,從我編寫的代碼中,該值只在函數內部更改,並在全局範圍內保持不變。 不知道我是否錯過了一些神奇的東西?由於某種原因使用函數

<?php 
$test=array(0=>"a",1=>"b"); 

function myTest(){ 
$test[0]="c"; 
print_r ($test); 
} 

myTest(); 
print_r($test); 
?> 

理想情況下,輸出應該是, 陣列([0] => C [1] => B) 陣列([0] => C [1] => B)

但是,從我的代碼中,結果是 Array([0] => c)Array([0] => a [1] => b) 我未能更改數組值,並將array [1]好。

回答

2

你需要有你函數中使用關鍵字global

function myTest(){ 
    global $test; 
    $test[0]="c"; 
    print_r ($test); 
} 
1

雖然你可以很容易地(並且緩慢地)使用global關鍵字,使其工作,這是一個非常氣餒的做法(search Stack Overflow to find out why)。

相反,你應該有你的函數接受數組作爲參數,並返回一個修改過的數組作爲結果:

$test = array("a","b"); 

function myTest(array $test) { 
    $test[0] = "c"; 
} 

$test = myTest($test); 
print_r($test); 

會使:

Array (
    [0] => c 
    [1] => b 
) 

或者,你可以接受數組作爲參考並直接進行處理(無需返回並重新分配):

$test = array("a","b"); 

function myTest(array &$test) { 
    $test[0] = "c"; 
} 

myTest($test); 
print_r($test); 

兩個示例中的輸出都是相同的。

相關問題