Array wie Objekt behandeln

thomy800

Erfahrenes Mitglied
Hi.

Ich würde gerne ein Array wie ein Objekt behandeln (weiß nicht, ob das in PHP möglich ist). Und zwar würde ich gerne ein Element aus dem Array herausgreifen und dieses herausgegriffene dann ändern. Anschließend soll der original-Array auch geändert sein, da das herausgegriffene Element sozusagen eine Weiterleitung zu dem Array sein soll.
Im Prinzip so hier:
PHP:
$array=array( 'hallo' => "lala", 'bla' => "alt");
$element=$array['bla'];
$element="was neues";
var_dump($array);
Ergebnis von dem var_dump soll dann wie folgt aussehen:
Code:
 array(2) {
["hallo"]=>
string(4) "lala"
["bla"]=>
string(3) "was neues"
}

Weiß jemand, wie (und ob) das geht? Macht man das irgendwie mit "&" ?

MfG thomy
 
Das ist ne gute Idee, aber trotzdem bleibt immernoch die Frage, wie ich dann damit das oben geschriebene umsetzen kann...
 
Da appelliere ich jetzt aber an deine Eigeninitiative.
Es steht sogar fast schon in dem Manual: http://de.php.net/manual/de/arrayobject.construct.php

Oder etwas anderes:
Eine eigene Klasse mit den magischen Methoden __get und __set wäre auch denkbar:
PHP:
class ObjectArray {
  private $_arr = array();
  function __construct(&$arr)
  {
    $this->_arr = &$arr;
  }

  function __get($var)
  {
    return $this->_arr($var);
  }
}
 
Zuletzt bearbeitet:
Hi,

du meinst du möchtest eine Referenz auf ein Element des Arrays haben.

Google sagt das dazu :

Referenzen erzeugen Sie, indem Sie dem Dollarzeichen der Variable einen Ampersand (&) voranstellen. Das geht auch ohne eine Funktion aufzurufen.

$val="Bernd Buchhalter";
$ref=&$val;
$ref="Ralf Differenz";
echo "Bernd Buchhalter heißt jetzt $val";
 
@ZodiacXP "set" entspricht "array[key]=wert" und "get" "array[key]" bringt mir daher nicht viel, weil ich gerade das bei dem array nicht verwenden will. (Liegt im übrigen daran, dass mein Array rekursiv aufgebaut wurde und daher viele weiter Arrays beinhalten die wieder welche behinhalten können. Daher geht array[key]= wert nicht so einfach.
@{Eve} Ich habe das so ähnlich versucht, hatte aber irgendwie nicht funktioniert... da muss ich irgendwo was falsch gemacht haben^^

Aber auch egal. Ich habe jetzt eine Variante gefunden, die für meinen Fall optimal geeignet ist. Ich habe einfach anstatt einfache Strings in den Array zu schieben Objekte rein gemacht die den String (und bei der Gelegenheit auch noch ein paar andere Infos und Funktionen) beinhaltet. Auf dieses Objekt kann ich auch wieder "set" verwenden (@ZodiacXP oder meintest du das so? Wenn ja, dafür ist kein ArrayObjekt erforderlich^^).

PS: Referenz, das war das Wort was mir vorhin nicht eingefallen ist.. Ich werde alt xD
 
(Liegt im übrigen daran, dass mein Array rekursiv aufgebaut wurde und daher viele weiter Arrays beinhalten die wieder welche behinhalten können. Daher geht array[key]= wert nicht so einfach.

Lustig. Die Antwort zu dem Problem, dass du siehst hast du dir selbst gegeben: Rekursion für "__get".

PHP:
	function __get($var)
	{
		if (is_array($this->a[$var]))
		{
			return new ObjectArray($this->a[$var]);
		}
		else
		{
			return $this->a[$var];
		}
	}

Das war unter anderem wieder eine Eigeninitiative auf die ich gewartet habe.
Aber schön, dass du eine andere Lösung gefunden hast.
 
Zurück