2012-03-31 2 views
2

Ich habe und die damit verbundene Array wie folgen aussehen:Erstellen neue Schlüssel in assoziativem Array und das Hinzufügen von Werten, um es

array(225) { 
    [0]=> 
    array(3) { 
    ["id"]=> 
    string(1) "1" 
    ["firstname"]=> 
    string(2) "me" 
    ["lastname"]=> 
    string(2) "ab" 
    [1]=> 
    array(3) { 
    ["id"]=> 
    string(1) "2" 
    ["firstname"]=> 
    string(3) "you" 
    ["lastname"]=> 
    string(2) "bc" 

Wie Sie die Struktur aller Elemente gleich sind. Was ich tun möchte, ist dynamiclly neuen Schlüssel in den verschachtelten Arrays zu erstellen, etwa so:

array(225) { 
     [0]=> 
     array(4) { 
     ["id"]=> 
     string(1) "1" 
     ["firstname"]=> 
     string(2) "me" 
     ["lastname"]=> 
     string(2) "ab" 
     ["newKey"]=> 
     string() "1,2,3,....n" 
     [1]=> 
     array(3) { 
     ["id"]=> 
     string(1) "2" 
     ["firstname"]=> 
     string(3) "you" 
     ["lastname"]=> 
     string(2) "bc" 
     ["newKey"]=> 
     string() "1,2,3,....x" 

und ich möchte neue Datensätze auf den Wert mit der Taste [ „newKey“] hinzufügen, aber in einer Weise, dass die alter Wert wird nicht gelöscht, aber wie oben gezeigt - wir trennen jeden neuen Wert mit einem Komma von den anderen.

Ich versuchte array_push und einige andere Dinge, aber kann nicht das genaue Ergebnis, das ich will.

Antwort

3

Ich weiß nicht, ob es so recht, was Sie wollen, aber scheint, wie so etwas wie dies könnte den Trick tun:

function addField(array &$aData, $newVal) 
{ 
    foreach($aData as $aUnit) 
     if(array_key_exists('newKey', $aUnit)) 
      $aUnit['newKey'] .= ",$newVal"; 
     else 
      $aUnit['newKey'] = '1'; 
} 

Lassen Sie mich wissen, wenn Sie, dass bei erweitert mögen, wenn es nicht genug von einer Basis, um dich ins Rollen zu bringen.

+0

Das ist genau das, was ich brauchte, obwohl ich die Notwendigkeit der Referenz nicht ganz verstehe, aber es ist mehr wie eine theoretische Frage. – Leron

+0

Die Referenz verhindert, dass eine Kopie des Arrays erstellt wird. Die Alternative wäre, kein Pass-by-Reference zu haben, in welchem ​​Fall Aufrufe an die Funktion aussehen würden wie $ aData = addField ($ aData, 5); Sie sehen dort, Sie erstellen ein neues Array und ersetzen das alte, anstatt nur das bestehende Array zu modifizieren. – quickshiftin

+1

Danke, diese Info war nützlich! – Leron

Verwandte Themen