2013-05-10 4 views
13

einfügen Ich habe eine ziemlich grundlegende Frage, aber ich bin fest. Ich bin ziemlich neu in PHP und ich habe ein Array wie folgt:PHP-Wert in Array von Arrays mit foreach

$array = array(
    'one' => 1, 
    'two' => array('key1' => 'val1','key2' => 'val2'), 
    'three' => array('key1' => 'val1','key2' => 'val2'), 
    'four' => array('key1' => 'val1','key2' => 'val2') 
); 

und für jedes des Arrays in dem Array (das heißt, ‚zwei‚drei‘und‚vier‘), ich mag Fügen Sie 'key3' => 'val3' in diese Arrays ein.

Ich habe versucht, dieses:

foreach($array as $item) { 
    if (gettype($item) == "array") { 
     $item['key3'] = 'val3'; 
    } 
} 

Aber es funktioniert nicht, und ich bin mir nicht sicher, warum. Mit verschiedenen print_r's scheint es, key3 '=>' val3 'in $ item einzufügen, wenn ich es in der Schleife ausdrucke, aber das ursprüngliche Array scheint unverändert zu sein. Ich habe auch eine normale for-Schleife ausprobiert, aber das hat auch nicht funktioniert.

+0

Sie den Schlüssel und sein Wert ist gleich für jeden Sub-Array? – SaidbakR

+0

neugierig, warum Sie nicht nur 'foreach ($ array als $ item_key => $ item) {$ array [$ item_key] ['key3'] = 'val3'; } ' – westcoast

Antwort

20

foreach arbeitet mit einer Kopie von $item, so können Sie Ihre Original-Array innerhalb des foreach nicht ändern. Eine Möglichkeit, dies zu umgehen, ist die Verwendung des Operators &.

foreach($array as &$item) { 
    if (is_array($item)) { 
     $item['key3'] = 'val3'; 
    } 
} 

Ein weiterer, eleganter Weg wäre array_walk() zu verwenden:

array_walk($array, function (&$v, $k) { 
    if (is_array($v)) { 
     $v['key3'] = 'val3'; 
    } 
}); 

Dieses Beispiel von PHP arbeiten 5.3 wird, wo Closures eingeführt wurden.

+0

$ item wird nur für die Schleife generiert. Du meinst '& $ array ['key3'] = 'val3';'! –

+0

@ Moskito-x Ich meine sicherlich, was ich geschrieben habe. Das ist der Sinn. Überprüfen Sie die Handbuchseite "foreach", die ich verlinkt habe. – kapa

+0

Das Ändern von $ item ist nutzlos. Wird immer von der nächsten Schleife überschrieben. –

0

PHP hat eine Funktion, um zu überprüfen, ob eine Variable ein Array ist oder nicht: is_array(). Verwenden Sie diese Option:

if (is_array($item)) { ... 
0

während mit foreach Taste Looping wie:

foreach($array as $key => $item){ 

    $array[$key]['newElement'] = "newValue"; 

} 
+1

Obwohl nicht die Antwort auf die Frage, das half mir, die Beziehung zwischen dem $ -Schlüsselwort und dem $ -Element besser zu verstehen. –