[PHP] Referenz auf einen Array-Key

strolch00

redraft.de
ID: 155297
L
21 April 2006
1.684
72
Hi @all,

so muss mich auch mal wieder hier blicken lassen um ne Frage loszuwerden.

Ich bin grad wieder bissl am basteln und erstelle mir grad nen paar schone Klassen. Allerdings habe ich in einer Klasse einen array mit verschiedenen assoziativen Key zB:
Code:
array {
   'element1' => 
      array {
         'subelement1' => array{}
      },
   'element2' => 
      array{
         'subelement2' => array{},
         'subelement2_b' => array{}
      }
}
wie gesagt ist nur ein beispiel. Das Problem ist das das Array beliebig tief gehen kann und beliebig viel Elemente enthalten kann.

Ich habe mir zum hinzufügen von Arrayelementen eine rekursive Funktion geschrieben die mir prüft ob der Key schon existiert oder nicht und ggf. die Referenz des aktuellen array key abspeichern soll.
Jedoch haut das mit der Referenz nicht so hin.

Meine Funktion sieht so aus:
PHP:
	private function array_find_key($strFindKey, &$arrArray)
	{
		// show first the first level keys
		if(array_key_exists($strFindKey, $arrArray)) {
			$this->currentBufferReferenz = &$arrArray[$strFindKey];
			return TRUE;
		} else {
			foreach($arrArray AS $key => $value)
			{
				if(is_array($value)) {
					if($this->array_find_key($strFindKey, $arrArray[$value])) {
						return TRUE;
					}
				}
			}
			return FALSE;
		}
	}

Das Array möchte ich auch per Referenz übergeben, weil es wie gesagt beliebig groß werden kann.

in der Funktion die diese Prüfung anstößt sollte ich dann doch die Referenz so in etwa verwenden können:
PHP:
		if($strSubZone !== NULL) {
//echo'<pre>';print_r($this->arrBufferKeys);echo'</pre>';
			if(!$this->array_find_key($strSubZone, $this->currentBufferReferenz)) {
				$this->currentBufferReferenz[$strSubZone] = array();
			}
		}

so das der key $strSubZone in dem Richtigen Array erstellt wird, oder habe ich einen denkfehler?

Hintergrund der ganzen Sache ist das ich wie gesagt unabhängig von den key-setzungen im Array beliebig viele unter-keys setzen möchte und die Tiefe des Oberschlüssels zu speichern ist bei assoziativen Array a weng kompliziert finde ich.

Danke schonmal @all.

MfG strolch00

*ps man möge mir Formfehler verzeihen, war schon lang nimmer hier.
 
Zuletzt bearbeitet:
Beim Refernezproblem kann ich dir jetzt nicht helfen, aber mir kommt da etwas komisch vor.

Code:
foreach($arrArray AS $key => $value)
{
    if(is_array($value)) {
        if($this->array_find_key($strFindKey, $arrArray[[color=red]$value[/color]])) {
            return TRUE;
        }
    }
}
Gehört da normalerweise nicht der $key hin? Oder übersehe ich da was? :-? Eventuell das das Problem?
 
Ja, das ist richtig hatte ich vorhin übersehen, ist aber schon korrigiert. Bin mittlerweile schon am schauen das ich irgendwie mit "array_walk_recursive" was anstellen kann mal schauen.

Trotzdem danke für den Hinweis. :)