Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Pllix

Frischling

  • »Pllix« ist der Autor dieses Themas

Beiträge: 21

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

1

14.10.2014, 14:52

[PHP] Mehrdimensionaler Array dynamisch erweitern

Hallo zusammen

Ich habe momentan ein kleineres Problem mit einem PHP-Code. Wahrscheinlich ist die Lösung des Problems ziemlich simpel, aber ich sehe vor lauter Bäumen den Wald nicht mehr... :S
Grundsätzlich geht es darum, das ich einen Mehrdimensionalen Array erweitern muss, der Pfad zum entsprechenden Array Feld jedoch dynamisch sein muss.

Ich habe hier einen Beispielcode, anhand dessen ich schon einiges rumprobiert habe

Edit: Sry, irgendwie mag der Code-Tag meinen PHP-Code nicht....

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$foo = array(
    'X' => 'A',
    'Y' => array(
            'Z' => array(
                'Q' => 'B'
            )
    ),
    'W' => 'C'
);
$path = '[Y][Z]';
$bar = "ID";
$path = substr($path, 1 , strlen($path)-2);
$foo{$path}[$bar] = "Neuer Inhalt";
print_r($foo);



Der Array $foo stellt dabei den dynamisch erzeugten Array dar

Erwarten würde ich folgende Ausgabe:

Quellcode

1
2
3
4
5
6
7
8
9
Array (    [X] => A
    [Y] => Array (
            [Z] => Array (
                    [Q] => B
                    [ID] => Neuer Inhalt
                )
        )
    [W] => C
)
Tatsächlich bekomme ich jedoch folgendes zu sehen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
Array(
    [X] => A
    [Y] => Array(
            [Z] => Array (
                    [Q] => B
                )
        )
    [W] => C
    [Y][Z] => Array (
            [ID] => Neuer Inhalt
        )
)

Ich komm einfach nicht dahinter, wie ich dieses Problem beheben soll, mit Google habe ich leider auch keine Lösung gefunden.
Ich hoffe, hier kann mir jemand weiterhelfen.

Danke und Gruss
Pllix

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Pllix« (15.10.2014, 09:28) aus folgendem Grund: [Code]-Tags mögen meinen PHP-Code irgendwie nicht...


2

14.10.2014, 16:11

Nutze mal statt print_r die Methode var_dump(), da sieht man das Problem etwas besser. (Alternativ vergleiche mal, was du hier gepostet hast und was print_r tatsächlich für das 2. Array ausgibt.


Quellcode

1
2
3
4
5
$var = array('a' => "Content");
$key = '[a]';
$var{$key} = "Content 2";

var_dump($var);


Quellcode

1
2
3
4
5
6
array(2) {
  ["a"]=>
  string(7) "Content"
  ["[a]"]=>
  string(9) "Content 2"
}

Pllix

Frischling

  • »Pllix« ist der Autor dieses Themas

Beiträge: 21

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

3

14.10.2014, 16:24

Hmm, ok ich sehe nun einen Teil des Problems:

Quellcode

1
2
3
4
5
["Y][Z"]=>
  array(1) {
    ["ID"]=>
    string(12) "Neuer Inhalt"
  }

Gut, dies hat mir aufgezeigt, das es unnötig war, die eckigen Klammern rauszusuchen.
Jedoch bleibt das Hauptproblem nach wie vor bestehen:

Quellcode

1
2
3
4
5
["[Y][Z]"]=>
  array(1) {
    ["ID"]=>
    string(12) "Neuer Inhalt"
  }

Wie schaffe ich es, das der String als Array-Pfad akzeptiert wird?

Tobiking

1x Rätselkönig

  • Private Nachricht senden

4

14.10.2014, 18:21

Google(php array path) ;)

Zur Erläuterung: Es gibt keinen Pfad für verschachtelte Arrays. Aber man kann es sich so einfach nachbauen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

14.10.2014, 18:26

$path = "myArray[15][27]['A']";
$$path = "Wunder werden wahr"
ist identisch zu:
$myArray[15][27]['A'] = "Wunder werden wahr"

Es geht also tatsächlich, dass man sich Variablen-Namen und Pfade somit dynamisch zusammenbauen kann. Schön ist aber was anderes.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Pllix

Frischling

  • »Pllix« ist der Autor dieses Themas

Beiträge: 21

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

6

15.10.2014, 08:34

Google(php array path)

Zur Erläuterung: Es gibt keinen Pfad für verschachtelte Arrays. Aber man kann es sich so einfach nachbauen.
Vielen Dank, damit hat es geklappt... das ich diese Seite selbst nicht gefunden habe :dash:

Quellcode

1
2
3
4
5
6
7
8
$path = array('Y','Z');
$bar = "ID";
$temp = &$foo;
foreach($path as $key) { 
    $temp = &$temp[$key];
}
$temp[$bar] = 'Inhalt';
unset($temp);

$path = "myArray[15][27]['A']";
$$path = "Wunder werden wahr"
ist identisch zu:
$myArray[15][27]['A'] = "Wunder werden wahr"
Leider funktioniert es mit deiner Variante nicht. Er erzeugt zwar den Inhalt, allerdings nicht im entsprechenden Array. Ich gehe davon aus, das er den String als Variablenname annimmt, könnte mich aber auch täuschen...
Aber ich habe ja dank Tobi eine elegantere Variante gefunden.

Besten Dank für die Hilfe

Gruss Pllix

Edit: Irgendwie mag dieses Forum meinen Quellcode nicht :S
Edit2: Danke an Checkmateing für den Tipp, nun klapt es auch mit dem Quellcode :)

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Pllix« (15.10.2014, 09:30)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

15.10.2014, 17:32

Leider funktioniert es mit deiner Variante nicht. Er erzeugt zwar den Inhalt, allerdings nicht im entsprechenden Array.
Klingt nach einem Fehler Deinerseits.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige