2017-06-13 3 views
0

Ich habe ein leeres Array, das ich versuche, einen Wert über eine einfache PHP-Funktion zu schieben. Das Problem ist, dass die Werte bei jeder Iteration nicht beibehalten werden. Hier ein Beispiel:Wie drücken Array-Werte über PHP-Funktion?

function addColors($arrayValues, $arrayToUpdate){ 
    $arrayToUpdate[]=$arrayValues; 
} 

$colors = array(); 
$newColors= array("red", "blue", "yellow"); 

foreach($newColors as $newColor){ 
    addColors($newColor, $colors); 
} 

echo "<pre>".print_r($colors, true)."</pre>"; 

Dies wird nur ein leeres Array drucken. Was ich jedoch gerne sehen möchte, sind die Werte, die dem Array $colors hinzugefügt werden. Irgendwelche Vorschläge?

+0

Fügen Sie ** & ** zu '$ arrayToUpdate' und' $ newColor' in Funktionsdefinitionen hinzu, um sie als Referenz zu behalten. – Peon

+0

Nicht ganz sicher, was Sie meinen, aber vielleicht müssen Sie nur das Array als Referenz übergeben? 'Funktion addColors ($ arrayValues, & $ arrayToUpdate) {' – Plasm

Antwort

2

Sie müssen entweder das neue Array und weisen Sie das zurückgegebene Array in der Schleife zurück:

function addColors($arrayValues, $arrayToUpdate){ 
    $arrayToUpdate[]=$arrayValues; 
    return $arrayToUpdate; 
} 

foreach($newColors as $newColor){ 
    $colors = addColors($newColor, $colors); 
} 

Oder es so, wie Sie es zu tun haben, die Variable übergeben, die als Referenz aktualisiert werden muss; Beachten Sie die &. Das ist meine Empfehlung:

function addColors($arrayValues, &$arrayToUpdate){ 
    $arrayToUpdate[]=$arrayValues; 
} 

foreach($newColors as $newColor){ 
    addColors($newColor, $colors); 
} 

Obwohl in diesem einfachen Beispiel, das ich nicht eine Funktion verwenden würden:

foreach($newColors as $newColor){ 
    $colors[] = $newColor; 
} 

Auch gibt es bereits eine Funktion, die dies tut, wenn die Argumente in einem anderen sind Bestellung:

array_push($colors, $newColor); 

Noch einfacher, ohne die Schleife:

$colors = array_merge($colors, $newColors); 
+0

Super! Danke, ich werde in 11 Minuten vergeben. – Presto

+0

Danke, ich konnte nicht aufhören und weiterarbeiten. – AbraCadaver