Ankündigung

Einklappen
Keine Ankündigung bisher.

array values in keys umwandeln

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array values in keys umwandeln

    Guten Morgen,

    ich habe folgendes Problem:

    ich habe hier ein Array, mit den Values nach dem explode
    PHP-Code:
    $text 'item.test.6.12134.12.12.343.4546';
    $text explode('.',$text);

    Array
    (
        [
    0] => item
        
    [1] => test
        
    [2] => 6
        
    [3] => 12134
        
    [4] => 12
        
    [5] => 12
        
    [6] => 343
        
    [7] => 4546

    daraus will ich ein Array bauen, das nur aus Keys besteht und der letzte Value als Wert hinzugefügt wird.
    Hat jemand eine Idee wie sowas gemacht wird ?

    PHP-Code:
    Array
    (
        [
    item] => Array
            (
                [
    test] => Array
                    (
                        [
    6] => Array
                            (
                                [
    12134] => Array
                                    (
                                        [
    12] => Array
                                            (
                                                [
    12] => Array
                                                    (
                                                        [
    343] => 4546
                                                    
    )

                                            )

                                    )

                            )

                    )

            )





    Viele Grüße

    mattin_m

  • #2
    PHP-Code:
    $result array_pop($array);
    foreach (
    array_reverse($array) as $value) {
      
    $result = array($value => $result);

    Kommentar


    • #3
      und der letzte Value als Wert hinzugefügt wird
      Das klingt doch jetzt schon nach einer fehlerhaften Konvention.

      Kommentar


      • #4
        jo, warum nicht so?
        PHP-Code:
        $text 'item.test.6.12134.12.12.343=4546';
        list(
        $path,$value) = explode('='$text2);
        $result = array();
        $current =& $result;
        foreach(
        explode('.'$path) as $key) {
            
        $current =& $current[$key];
        }
        $current $value
        sieht zwar erstmal umständlicher aus, hat aber den Vorteil dass 1. klar zwischen Schlüsseln und Wert unterschieden wird und 2. $result schon vorbelegt sein kann, da es nicht überschrieben wird, sondern lediglich der Wert an der spezifizierten Stelle eingefügt wird. Praktisch, wenn $text z.B. eine Zeile in einer Konfigurationsdatei ist.


        Edit: das selbe noch mal etwas schöner:

        PHP-Code:
        $text 'item.test.6.12134.12.12.343=4546';
        $array = array();
        insert_into_array($text$array);

        /**
          * @param string $spec Spezifikation in der Form 'item_1.item_2.[...].item_n=wert'
          * @param array $array Ziel-Array
          */
        function insert_into_array($spec, &$array)
        {
            list(
        $path,$value) = explode('='$spec2);
            
        $current =& $array;
            
        // setze Referenz $current Schritt für Schritt auf $array['item_1']['item_2'][...]['item_n']
            
        foreach(explode('.'$path) as $key) {
                
        $current =& $current[$key];
            }
            
        // belege dieses Array-Element mit $value
            
        $current $value;

        Kommentar


        • #5
          Vorsicht mit foreach und Referenz. Da hatten wir hier mal ein Thema mit seltsamen Seiteneffekten.

          Kommentar


          • #6
            Der Code ist mit dieser Eingabe jedenfalls erfolgreich getestet. Kann es sein dass Du so etwas wie foreach($a as &$v) meinst?

            Kommentar


            • #7
              Ja, wahrscheinlich. http://www.php.de/off-topic-diskussi...tml#post493837

              Kommentar


              • #8
                Trotzdem interessant.. ich denke, dadurch dass ich das ganze jetzt in eine Funktion gepackt habe sollte die Gefahr von Seiteneffekten gebannt sein.

                Kommentar

                Lädt...
                X