2012-04-14 6 views
0

Mein Problem ist wie folgt. Ich habe ein mehrdimensionales Array. Ich deklariere mein Array. Dann führe ich einen Code aus, der mein Array teilweise füllt. Dann führe ich eine Funktion aus, die unter anderem ein Element in meinem Array innerhalb der Funktion verändern soll. Dies funktioniert leider nicht. Also meine Frage ist einfach. Es ist normal? Und wenn ja, wie kann ich das überwinden? Vielen Dank im Voraus für Ihre Antworten. Prost. Marc.PHP - Wie ändert man mehrdimensionale Array-Elemente innerhalb einer Funktion?

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



my_function(); 
print_r($list); 

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

Ich nehme an, Ihr Array von 'print_r' genommen wird, und nicht wirklich' [0] => '? – Ryan

Antwort

2

Sie das Array an die Funktion durch Verweis übergeben konnte

my_function(&$list) { 

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

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

oder einfach zurück das Array von der Funktion

my_function($list) { 

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

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

oder verwenden Sie ein global

my_function() { 

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

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

Hallo Zoloex. Du schaukelst! Diese globale Sache hat es getan. Vielen Dank ... – Marc

+0

funktionieren alle drei solutions, aber global ist das hässlichste;) –

+0

Ok, also ging ich mit & $ list ... – Marc

0

Add 'in Ihrem internen Array-Indizes

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

und entfernen Sie die '[]' s –

+0

Hallo Chen. Ich verstehe nicht was du sagst. Sorry, ich, Neuling ... – Marc

+0

Ersetzen Sie einfach relevanten Code (Zeilen 2-5) mit diesem Code –

1

Etwas wie folgt aus:

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



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

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

alternativ:

$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

Hallo Joe. Danke, dass du versucht hast zu helfen. Leider habe ich das versucht, aber es funktioniert nicht ... – Marc

+0

Die [0] ist falsch. Aktualisiert. –

1

In Ihrem Fall wird das Feld nicht geändert , weil es im globalen Umfang ist, und Im Gegensatz zu anderen Sprachen bietet PHP keinen automatischen Zugriff auf den globalen Bereich innerhalb der Funktion. So müssen Sie tun:

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

Aber noch besser, übergeben Sie das Array als Argument durch Verweis auf die Funktion

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

@minitech Code aktualisiert, danke für den Hinweis :) –

+0

Helo Darhazer. Danke vielmals. Beide arbeiten gut. Warum ist der zweite besser? – Marc

+0

Da es funktioniert, auch wenn Sie die Variable im globalen Raum umbenennen, oder für den Fall, dass Sie die gleiche Operation für verschiedene Arrays durchführen müssen. Im Allgemeinen vermeiden Sie die Verwendung globaler Variablen (weil Sie versehentlich eine globale Variable überschreiben können), und die Kopplung (mit global arbeiten Sie mit genau einem Array und die Übergabe durch Referenz ermöglicht es Ihnen, mit jedem Array zu arbeiten) –

Verwandte Themen