2016-06-20 5 views
3

Es ist schwierig, in Wort zu erklären, was zu tun, ich versuche, so ein minimales Beispiel mir die Bereitstellung, siehe Kommentare:ändern Werte globale Array durch die von einer Funktion zurückReferenz Ändern

$g = array( 
    'a' => array(1, 2, 3), 
    'b' => array(4, 5, 6) 
); // A global array 

function &search($key) { 
    global $g; 
    return $g[$key]; 
} 

$a = search('b'); // Now $a should be a reference to $g['b'], right? 

$a[2] = 666; 
print_r($a); // Ok changed 
print_r($g); // Why not changed? 

Getestet auf PHP 5.6.4.

Grund für das, was ich versuche, ist die Tatsache, dass die Suchfunktion in meinem Anwendungsfall (nicht nur eine Schlüsselindizierung!) Offensichtlich komplexer ist, und nachdem das Ergebnis gefunden wurde, ist es praktisch, an Ergebnissen zu arbeiten : Das ursprüngliche Array ist auf verschiedenen Ebenen geschachtelt.

+1

Weil Sie von Wert sind Rückkehr nicht näher; Das Ändern des zurückgegebenen Werts ändert also nicht den globalen Wert –

+0

@MarkBaker Warum sagen Sie, dass ich nach Wert zurückgebe? Sollte "& search" nicht als Referenz zurückgegeben werden? –

Antwort

4

Von the manual:

Hinweis: Im Gegensatz Parameterübergabe, hier haben Sie & in beiden Orten verwenden - um anzuzeigen, dass Sie durch Bezugnahme zurückkehren möchten, keine Kopie, und das Bezugs, um anzuzeigen, zu binden, eher als gewöhnliche Zuordnung, sollte für $ myValue getan werden.

Ihr Code muss nur ein zusätzliches Zeichen (die Referenz „Bindung“ eine oben genannten), wie folgt:

$a =& search('b'); 
+0

Greeeeat! Vielen Dank! Es war hart genug, '&' nur in der Funktionserklärung zu verwenden! –

+0

Ich habe das aufgegeben, wenn es um PHP geht. Ich könnte nie auf diese Weise Referenzen bekommen. Zum Beispiel, warum ist dann der Zweck 'function & search ($ key) {}'? Was macht das kaufmännische Und in diesem Fall? – samayo