Wert an assoziatives unterarray anhängen

jensner

Mitglied
Hallo Leute,

ich versuche nun schon seit Ewigkeiten einen Wert an ein bestehendes,
assoziatives Unterarray anzuhängen und stehe irgendwie auf der Leitung.

Die Funktion ist folgende:

1. Es wird ein Array angelegt und in einer Schleife werden dann jeweils Arrays + Unter-Arrays
mit einer ID angelegt.

Code:
Array
(
    [27] => Array
        (
            [id] => 27
        )

    [25] => Array
        (
            [id] => 25
        )

    [26] => Array
        (
            [id] => 26
        )

    [33] => Array
        (
            [id] => 33
        )
)

nun möchte ich an die Unterarrays in einer weiteren Schleife zusätzliche Werte (z.B. 'Start' => '1') anhängen und bekomme das einfach nicht auf die Reihe.

in der ersten Ebene kann ich mit $array['Test'] = '1111' einen Wert anhängen, nicht jedoch in der zweiten Ebene
mit z.B.
Code:
$Testarray['27']['neueBezeichnung'] = 'NeuerWert'

Könnt Ihr mir da evtl. nen Tip (oder auch Link) zur Syntax geben?

Vielen Dank im Voraus
Gruß Jens
 
Zuletzt bearbeitet:
Das Problem kann ich nicht reproduzieren - Exemplarisch aber ein kleines Beispiel, welches funktioniert.
Eventuell kannst du noch deinen eigentlichen Ansatz bereitstellen. Womöglich stehst du nicht auf dem Schlauch, oder einfach an der falschen Stelle.

Unschön in deinem Beispiel sind übrigens numerische Keys in Stringform, jedoch bin ich der Meinung, dass diese automatisch in Zahlenwerte umgewandelt würden. Was gibt dir denn beispielsweise [phpf]var_dump[/phpf] für dein bearbeitetes Array aus?

PHP:
<?php

// gegebene Struktur
$myArray = array(
		1 => array(
				'id' => 1
			),
		2 => array(
				'id' => 2
			),
		// ...
	);

// key => value in Array unter Index '2' einfügen
$myArray[ 2 ]['key'] = 'value';

/*
array(
	1 => array(
			'id' => 1
		),
	2 => array(
			'id'  => 2,
			'key' => 'value'
		)
)
*/

Es ist in PHP sogar möglich (wenn auch recht zeitintensiv) Unterarrays mitsamt der Elternarrays on the fly zu erzeugen:
PHP:
<?php
$myArray = array();
$myArray['foo']['bak'] = 42;

// besser
$myArray = array();
$myArray['foo'] = array();
$myArray['foo']['bak'] = 42;
 
Danke Dir schon mal für Deine Hilfe.
Genau so hätte ich das auch probiert. Nur leider bekomme ich ständig einen Fehler.
Hier der Var_Dump:

Code:
array(4) {
  [27]=>
  array(1) {
    ["id"]=>
    string(2) "27"
  }
  [25]=>
  array(1) {
    ["id"]=>
    string(2) "25"
  }
  [26]=>
  array(1) {
    ["id"]=>
    string(2) "26"
  }
  [33]=>
  array(1) {
    ["id"]=>
    string(2) "33"
  }
}

Das Problem an der ganzen Sache ist leider dass der gesamte Aufbau der Arrays völlig dynamisch sein muß daher hatte ich den Ober-Arrays die ID´s zugewiesen.

Übrigens hab ich grad mal getestet die Oberarrays ohne ID-Zuweisung zu erstellen und siehe da, jetzt klappts.
Heißt das also, dass das Array mit einer zugewiesenen Zahl irgendwie nicht korrekt indizierbar ist?

Gruß JEns
 
Zuletzt bearbeitet:
Nur leider bekomme ich ständig einen Fehler.
Sofern sich dieser in Form einer Fehlermeldung äußert, könnte sie auch noch bei der Problembehandlung hilfreich sein.

Das Problem an der ganzen Sache ist leider dass der gesamte Aufbau der Arrays völlig dynamisch sein muß daher hatte ich den Ober-Arrays die ID´s zugewiesen.
Das sollte eigentlich kein großartiger Akt sein, sofern die Technik mitspielt.
PHP:
$myArray[ $id ][ $key ] = $value;

Übrigens hab ich grad mal getestet die Oberarrays ohne ID-Zuweisung zu erstellen und siehe da, jetzt klappts.
Nun wirst du aber wahrscheinlich Schwierigkeiten bekommen, sofern du über die Indizies auf die Unterarrays zugreifen möchtest.

Heißt das also, dass das Array mit einer zugewiesenen Zahl irgendwie nicht korrekt indizierbar ist?
Nein, Arrays in PHP sind eigentlich keine richtigen Arrays wie in anderen Sprachen sondern (Hash)Maps, welche kein Problem mit nicht-sequenziellen Indizies haben.
Überprüfe bitte, ob dein Zugriff beim Schreiben der Unterarrays über die entsprechenden Indizies geht, und sofern du String-Repräsentativen deiner numerischen Indizies nutzt (zB aus einer Datenbank-Abfrage), kannst du versuchen sie nach Integer zu casten:
PHP:
$index = '27';
$myArray[ (int) $index ]['foo'] = 42;
Wobei das wie gesagt der PHP-Interpreter bereits machen sollte.

Könntest du bitte deinen Code bereitstellen? Finde das unangenehm nur auf der Theorie rumzuspekulieren, während du eventuell etwa ganz anderes meinst. ;)
 
OK, dann werd ich mal versuchen das ganze mit meinem Code zu demonstrieren.

Ziel ist (vereinfacht ausgedrückt) eine variable Anzahl von übergebenen Preislisten und deren
zugehörigen Preisen zu verarbeiten

übergebene POST-Variablen in einer Schleife verarbeiten
Schritt1: Anlegen eines Arrays mit Unterarrays ($kid)
Schritt2: Befüllen der Unterarrays mit den zu den Preislisten (ID`s) zugehörigen Werten

Code:
// Werte den Arrays zuordnen
	while (list ($key, $val) = each ($_POST)){
	
			//Mehrdimensionales Array -> ID´s setzen
		if ( is_numeric(substr($key,0,strpos($key,'-')))) {
			// Wenn die ersten Zeichen numerisch sind zerlegen und der variable zuweisen 
				$kid = substr($key,0,strpos($key,'-'));
				// Prüfung ob bereits in Array enthalten
				
				if (!in_array(array('id' => $kid),$preisearray)) {
				
						
						$preisearray[$kid] = (array('id' => $kid));
						
				}
				
		}
	
	//Alle Tages-Werte auslesen und in Variablen übergeben
	if (substr($key,0,1) == "w") {
		//gefundne Tageswerte differenzieren und den Variablen zuweisen
		if (substr($key,-2,2) == "n1") {
			// VON-Tage in Variable schreiben
			$arrnr = explode('-',$key);
			$nr = substr($arrnr[0],1);
				//echo"Nummer: $nr<br>";
				//Variablennamen zusammenbauen
				$vname = $nr . "v";
				echo "$vname - $val<br>";
				//Von-Wert in alle Arrays einfügen
				foreach($preisearray as $tmpkey => $tmpval) {
					//Info-Anzeige
					echo"Array: 'id' => $tmpkey<br>";
					
					$preisearray[$tmpkey][$vname] = $val ;
								
					//echo"$tmpkey => $tmpval<br>";
				}

Ich hab jetzt nur mal den Teil rauskopiert bis zu dem Punkt der mir Probleme bereitet.

Gruß Jens
 
Zuletzt bearbeitet:
Sorry, hier nochmal den Code als PHP-Code

PHP:
// Werte den Arrays zuordnen
	while (list ($key, $val) = each ($_POST)){
	
			//Mehrdimensionales Array -> ID´s setzen
		if ( is_numeric(substr($key,0,strpos($key,'-')))) {
			// Wenn die ersten Zeichen numerisch sind zerlegen und der variable zuweisen 
				$kid = substr($key,0,strpos($key,'-'));
				// Prüfung ob bereits in Array enthalten
				
				if (!in_array(array('id' => $kid),$preisearray)) {
				
						
						$preisearray[$kid] = (array('id' => $kid));
						
				}
				
		}
	
	//Alle Tages-Werte auslesen und in Variablen übergeben
	if (substr($key,0,1) == "w") {
		//gefundne Tageswerte differenzieren und den Variablen zuweisen
		if (substr($key,-2,2) == "n1") {
			// VON-Tage in Variable schreiben
			$arrnr = explode('-',$key);
			$nr = substr($arrnr[0],1);
				//echo"Nummer: $nr<br>";
				//Variablennamen zusammenbauen
				$vname = $nr . "v";
				echo "$vname - $val<br>";
				//Von-Wert in alle Arrays einfügen
				foreach($preisearray as $tmpkey => $tmpval) {
					//Info-Anzeige
					echo"Array: 'id' => $tmpkey<br>";
					
					$preisearray[$tmpkey][$vname] = $val ;
								
					//echo"$tmpkey => $tmpval<br>";
				}

Gruß Jens
 
Hab das Problem gefunden.
Ich habe scheinbar das Array gleich in der ersten Schleife viel zu
umständlich befüllt und dadurch wohl auch die Folgeprobleme generiert.

PHP:
 $preisearray[$kid] = (array('id' => $kid));

Folgendermaßen funktionierts jetzt problemlos und läßt sich auch ganz einfach indizieren und
nachträglich weiterbefüllen.

PHP:
$preisearray[$kid]['id'] = $kid;

Danke Euch
Gruß Jens
 
Zurück