2012-04-14 58 views
0

我的問題如下。我有一個多維數組。我宣佈我的數組。然後,我運行一些代碼來部分填充我的數組。然後我運行一個函數,其中應該修改函數中的數組中的某個項。這不幸的是不工作。所以我的問題很簡單。這是正常的嗎?如果是的話,我該如何克服這一點。非常感謝您的回覆。乾杯。馬克。PHP的 - 如何修改函數內的多維數組項目?

$list = array([0]=> 
        array(
         [name]=>'James' 
         [group]=>'' 
         ) 
      ); 



my_function(); 
print_r($list); 

function my_function(){ 
    //some code here 
    $list[0]['group'] = 'groupA'; 
} 
+0

我是否您的陣列從'print_r'採取,並且實際上不'[0] =>'? – Ryan 2012-04-14 17:21:44

回答

2

,你可以通過引用數組傳遞給函數

my_function(&$list) { 

    $list[0]['group'] = 'groupA'; 
} 

$list = /*...*/ 
my_function($list); 

或簡單地返回從函數的數組

my_function($list) { 

    $list[0]['group'] = 'groupA'; 
    return $list; 
} 

$list = /*...*/ 
$list = my_function($list); 

,或者使用全球

my_function() { 

    global $list; 
    $list[0]['group'] = 'groupA'; 
} 

$list = /*...*/ 
my_function(); 
+0

Hello Zoloex。你搖滾!這個全球性的事情做到了。非常感謝你... – Marc 2012-04-14 17:25:52

+0

所有三個soloutions工作,但全球是最醜的;) – 2012-04-14 17:32:08

+0

好吧,所以我去了&$ list ... – Marc 2012-04-14 17:33:20

0

增加'在你的內部數組索引

array(
         'name'=>'James' 
         'group'=>'' 
    ) 
+1

並刪除'[]'s – 2012-04-14 17:21:48

+0

你好陳。我不明白你在說什麼。對不起,我,新手... – Marc 2012-04-14 17:23:28

+0

只需用此代碼替換相關代碼(第2-5行) – 2012-04-14 17:27:07

1

事情是這樣的:

$list = array(0 => 
        array(
         'name'=>'James' 
         'group'=>'' 
         ) 
      ); 



my_function($list); 
print_r($list); 

function my_function(&$list){ 
    //some code here 
    $list[0]['group'] = 'groupA'; 
} 

或者:

$list = array(0 => 
        array(
         'name'=>'James' 
         'group'=>'' 
         ) 
      ); 



$list = my_function($list); 
print_r($list); 

function my_function($list){ 
    //some code here 
    $list[0]['group'] = 'groupA'; 
    return $list; 
} 
+0

Hello Joe。感謝您的幫助。不幸的是,我試過,但它不工作... – Marc 2012-04-14 17:22:50

+0

[0]不正確。更新。 – 2012-04-14 17:25:40

1

在你的情況下,數組沒有改變,因爲它在全球範圍內,而且與其他語言不同,PHP不提供從函數內部自動訪問全局範圍的功能。所以,你必須做的:

function my_function(){ 
    global $list; 
    //some code here 
    $list[0]['group'] = 'groupA'; 
} 

但更好的是,通過引用傳遞數組作爲參數傳遞給函數

function my_function(&$list){ 
    //some code here 
    $list[0]['group'] = 'groupA'; 
} 
+0

@minitech代碼更新,謝謝你的注意:) – 2012-04-14 17:23:15

+0

Helo Darhazer。很多。兩個soution都很棒。爲什麼第二個更好? – Marc 2012-04-14 17:27:46

+0

因爲即使您在全局空間中重命名變量,或者需要對不同陣列執行相同的操作,它也可以工作。一般來說,避免使用全局變量(因爲你可以無意中覆蓋一個全局變量)和耦合(全局你正在處理一個數組,並通過引用傳遞它使你可以使用任何數組) – 2012-04-14 17:32:57