PHP Array Rückgabe

cfHxqA

Lieutenant
Registriert
Feb. 2012
Beiträge
630
Hallo, irgendwie sehe ich gerade vor lauter Bäumen den Wald nicht mehr. Es geht um folgendes Anliegen:

Ich habe einen String, welcher sich wie folgt zusammensetzt:
Code:
event.onApplicationStart.button

Ich formatiere den String mit einer Schleife, in dieses Format:
Code:
['event']['onApplicationStart']['button']


Jetzt möchte ich mit dem Formatierten String, den Text aus einem Array bekommen und finde keine annehmbare Lösung?! Der String kann XY weitere Schlüssel dranhängen, als auch weniger haben. Es geht mir nur um die Ausgabe.


Umgewandelt wird wie folgt:
Code:
$str = '';
$item = 'event.onApplicationStart.button';
foreach (explode('.', $item) as $key)
  $str.= "['{$key}']";


Und irgendwo muss ich ja das Ergebnis zwischenspeichern. Nur finde ich keine elegante Lösung. Nur aufwendige Ansätze..
 
Code:
<?php

$item = 'event.onApplicationStart.button';

function StringToArray( $str )
{
  $p = strpos( $str, '.' );
  $firstpart = substr( $str, 0, $p );
  $lastpart = substr( $str, $p + 1 );

  if( $p !== false )
    return array( $firstpart => StringToArray( $lastpart ) );
  return array( $str => '' );
}

echo '<pre>';
print_r( StringToArray( $item ) );
echo '</pre>';
Code:
Array
(
    [event] => Array
        (
            [onApplicationStart] => Array
                (
                    [button] => 
                )

        )

)
So?
 
ist das ein IniFile? Ich würde dir empfehlen dir das Zend Framework mal anzuschauen. Auch wenn du das MVC nicht nutzen willst, kannst du einfach die anderen Sachen einbinden.

Zend_Config_Ini wäre deine Alternative. ;)

Ansonsten das von Yuuri (obwohl mir die Funktion irgendwie nicht so gefällt.. tut aber anscheinend das Richtige^^)
 
Jetzt möchte ich mit dem Formatierten String, den Text aus einem Array bekommen
Ich bin nicht sicher, ob ich das richtig verstanden habe.

Du hast eine Map der Form

PHP:
$map = [
  'event' => [
    'onApplicationStart' => [
      'button' => 'irgendein text'
    ]
  ]
];

und willst jetzt auf Basis des Strings 'event.onApplicationStart.button' auf den innersten Wert dieser Map zugreifen ('irgendein text')? Habe ich das so richtig verstanden?
 
Ich habe ein Array, welches als Art "Sprachdatei" dient. Diese Sprachdatei gibt bei "Button", irgendeinen Text zurück. Und ich wollte nun anhand des zusammen gefügten Strings, diesen Wert aus dem Array erhalten.

Array:
Code:
{
  "event" : {
    "onApplicationStart" : {
      "text" : "BlaBla."
     ,"button" : "Hier gehts weiter."
    }
   ,"onUpdateAvailable" : {
     "text" : "BlaBla."
     ,"button" : "Hier gehts weiter."
    }
  }

String:
Code:
event.onApplicationStart.button


Mein Problem ist dieses, wenn ich den String aufteile, klappt es auch einwandfrei. Aber, der String soll weitere Werte anfügen können, oder weniger haben, wie z.B. nur bis onApplicationStart oder hinter Button noch weitere Felder, bis der eigentliche Text ausgegeben wird. Das letzte Element gibt immer einen Text zurück. Ich muss aber anhand des zusammengesetzten Strings auf das Array zugreifen - eben flexibel.
 
Zuletzt bearbeitet:
Also habe ich das richtig verstanden. Du brauchst den String nicht extra umzuformatieren.

PHP:
$map = array(
   'event' => array(
      'onApplicationStart' => array(
         'button' => 'irgendein text'
      )
   )
);

$completeKey = 'event.onApplicationStart.button';

$parts = explode('.', $completeKey);

foreach ($parts as $key) {
   $map = $map[$key];
}

var_dump($map);

Ergibt 'irgendein text'. Ein isset($map[$key]) sollte da noch rein, aber jetzt hast du mal einen Ansatz.
 
Oh man. Die Hitze hat mir mehr als zugesetzt! Herzlichen Dank! Klappt einwandfrei!! :-)
 
Zurück
Oben