PHP: Aus String ein Array ansteuern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP: Aus String ein Array ansteuern

    Anzeige
    Hallo liebe Coder-Community!
    Ich stehe vor einem Problem und komme mir dabei ziemlich dämlich vor.
    Ich möchte aus ein paar Strings die ich von explode() bekomme, ein Array ansteuern.

    PHP-Quellcode

    1. static function getConfig($what = NULL){
    2. $config = require "master.conf.php";
    3. if($what != NULL && is_string($what)){
    4. $config_layers = explode("~", $what);
    5. //Hier müsste der Aufruf zusammengebastelt werden.
    6. }else return $config;
    7. }


    Also: Die Variable $what beinhaltet zum Beispiel "system_info~version". Das ~ dient dabei als Delimiter für die explode Funktion. Im nächsten Schritt liefert mir explode die Ebenen zurück. In diesem Fall system_info und version.

    Mit diesen beiden Werten möchte ich gern folgenden Wert in der Config ansteuern

    PHP-Quellcode

    1. $config['system_info']['version']


    Ich kann nicht

    PHP-Quellcode

    1. $config[$config_layers[0]][$config_layers[1]]
    nutzen, da ich an manchen Stellen in der Config eine andere Anzahl von Ebenen habe. Das heißt, man müsste das ganze irgendwie dynamisch zusammenschuhstern.

    Ich kenn mich ja aus, aber entweder seh ich die Lösung schlichtweg nicht, oder sie ist doch weiter weg.. Aber jetzt erstmal Eure Meinungen. Ihr braucht mir auch nichts großartig vorkauen, einfach erläutern wie ich an mein Ziel komme reicht, umgesetzt bekomm ich das schon :)
    Ich hoffe vor allem mal, dass das Problem klar geworden ist. Das ist nicht so leicht zu schildern :)

    Mit freundlichen Grüßen,
    Golrok
    Eine Signatur: Ein Objekt, welches in modernen Kommunikationsplattformen der eindeutigen Herkunftsidentifizierung einer von einem Individuum verfassten Botschaft dient.
    -Ich selbst.. Oder doch nicht?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Golrok ()

  • PHP-Quellcode

    1. $config[($config_layers[0])][($config_layers[1])]

    So geht es theoretisch. Allerdings nur, wenn das Array 2-dimensional ist...

    Du könntest mit if-Anweisungen dann auch prüfen, wie viele Elemente in $config_layers drin sind und ensprechend den Aufruf nehmen. Oder eine while-Schleife, die immer eine Ebene tiefer in das Array hineingeht.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Magogan ()

  • Dem bin ich mir bewusst...
    Aber sobald ein etwas in $what steht wie "system_info~someCategory~version", geht das ja nicht mehr, weil eine Ebene zu wenig angesteuert wird. Also müsste man diese Geschichte irgendwie erst in einem String zusammenbauen und dann aufrufen. Oder hab ich grad ein Brett vor'm Kopp?

    Edit: Okay, dein Edit bringt mich da auf ne Idee, ich probier grade mal rum, ignorier das obige von mir :)
    Eine Signatur: Ein Objekt, welches in modernen Kommunikationsplattformen der eindeutigen Herkunftsidentifizierung einer von einem Individuum verfassten Botschaft dient.
    -Ich selbst.. Oder doch nicht?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Golrok ()

  • Golrok schrieb:

    Dem bin ich mir bewusst...
    Aber sobald ein etwas in $what steht wie "system_info~someCategory~version", geht das ja nicht mehr, weil eine Ebene zu wenig angesteuert wird. Also müsste man diese Geschichte irgendwie erst in einem String zusammenbauen und dann aufrufen. Oder hab ich grad ein Brett vor'm Kopp?

    Edit: Okay, dein Edit bringt mich da auf ne Idee, ich probier grade mal rum, ignorier das obige von mir :)
    Ja, aber nicht die runden Klammern vergessen, sonst kommt da ein Syntaxfehler zustande ;)
  • Anzeige
    Hm? Führt das zu einer Warnung, einem Fatal oder was?
    Also er führt es in beiden Varianten (mit und ohne Klammern) anstandslos aus.

    PHP-Quellcode

    1. abstract class Factory{
    2. static function getConfig($what = NULL){
    3. $config = require "master.conf.php";
    4. if($what != NULL && is_string($what)){
    5. $config_layers = explode("~", $what);
    6. for($i = 0; $i < count($config_layers); $i++)
    7. $config = $config[$config_layers[$i]];
    8. }
    9. return $config;
    10. }
    11. }
    Alles anzeigen


    Ziemlich dämlich dass ich da nicht von selbst drauf gekommen bin, irgendwie stand ich heute auf'm Schlauch.
    Naja, Danke jedenfalls für deine Hilfe :)

    Mit ganz freundlichen Grüßen,
    Golrok
    Eine Signatur: Ein Objekt, welches in modernen Kommunikationsplattformen der eindeutigen Herkunftsidentifizierung einer von einem Individuum verfassten Botschaft dient.
    -Ich selbst.. Oder doch nicht?