2010-12-20 3 views
1

So habe ich ein mehrdimensionales Array, das in einem Objekt gespeichert ist. Ich möchte diesem Array zusätzliche Schlüssel hinzufügen.Speichern eines mehrdimensionalen Arrays als Objektvariable, Hinzufügen weiterer Schlüssel zum Array

Hier ist, was ich habe:

$object->pathsArray = array(
    "key1" => array('path' => '/some/path/to/some/file.php', 'action' => 'index'), 
    "key2" => array('path' => '/some/path/to/some/class.php', 'action' => 'method2') 
); 

Und hier ist, was ich davon ausgegangen, aber nicht tat funktionieren würde:

$object->pathsArray['key3'] = array('path' => '/some/path/to/some/method/or/script.php', 'action' => 'method3'); 

Meine erste Abhilfe:

$newPathsArray = array("key3" => array('path' => '/some/path/to/some/method/or/script.php', 'action' => 'method3')); 
$object->pathsArray = array_merge($object->pathsArray, $newPathsArray); 

Eine andere Lösung, die funktionieren sollte:

$tempPathsArray = $object->pathsArray; 
$tempPathsArray['key3'] = array('path' => '/some/path/to/some/method/or/script.php', 'action' => 'method3'); 
$object->pathsArray = $tempPathsArray; 

Also meine Frage: Gibt es eine einfachere Syntax: in einer temporären zu bringen gezwungen (dh eine Zeile Lösung) oder bin ich. Variable, anhängen, dann den Wert zum Objekt zusammenführen/neu zuweisen?

+0

Wenn Sie sagen, die erste Version hat nicht funktioniert, in welcher Weise ist es fehlgeschlagen? Hat sich der 'pathsArray' einfach nicht geändert? Wenn dies der Fall ist, schlägt es vor, dass das Objekt irgendeine Art von get/set Logik hat, die Ihnen eine * Kopie * des tatsächlich gespeicherten Arrays bei jeder Anforderung gibt (und somit ist die einzige Möglichkeit, es tatsächlich zu ändern, zu verwenden die Set-Logik, das ganze Array überschreiben). Wenn dies der Fall ist, ist Ihre erste Problemumgehung wahrscheinlich die einfachste verfügbare Methode. – Amber

+0

@Tom Wie haben Sie zuerst die Schlüssel 'key1' und' key2' gesetzt? Ist das 'pathsArray' Attribut als privat/geschützt definiert? –

+0

@Amber, habe ich nicht einmal die Get/Set-Logik, die jetzt erklärt, macht vollkommen Sinn. – Tom

Antwort

0

Entschuldigen Sie, um eine Antwort zu schreiben, aber ich kann nicht kommentieren. Ich denke, dass es nicht korrekt ist, ein Attribut öffentlich zu machen, nur um es auf diese Weise zu benutzen. Die richtige Sache sollte ein Setter machen, um es zu füllen, nicht das Klassen-Design nur dafür zu ändern.

Verwandte Themen