[PHP5] string anhand eines zeichen zerstückeln

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

  • [PHP5] string anhand eines zeichen zerstückeln

    hallo,

    ich habe ein kleinen denkfehler und google und php.net haben nichts gebracht.

    Bsp String:
    Hallo ^5Welt, ^4du ^7bist ^3so ^2schön!

    gewünschtes ergebnis:
    array[0] = "","Hallo";
    array[1] = "^5","Welt, ";
    array[2] = "^4", "du";
    array[3] = "^7", "bist";
    array[4] = "^3", "so";
    array[5] = "^2", "schön";

    explode, preg_split und andere split-funktionen haben mir nicht geholfen
    Gruß
    Uzu

    private Homepage

  • #2
    Re: [PHP5] string anhand eines zeichen zerstückeln

    Original geschrieben von UzumakiNaruto
    explode, preg_split und andere split-funktionen haben mir nicht geholfen
    und was haste da genau gemacht?
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Re: Re: [PHP5] string anhand eines zeichen zerstückeln

      Original geschrieben von MelloPie
      und was haste da genau gemacht?
      explode gibt mir ein array zurück .. aber ohne ^ und ohne das zeichen dahinter um es zu verarbeiten.

      preg_split nur ein fehler:
      Warning: preg_split(): No ending delimiter '^'
      PHP-Code:
      print_r(preg_split('^'$code, -1PREG_SPLIT_OFFSET_CAPTURE)); 
      und mir for jedes zeichen einzelt überprüfen ist
      a) aufwending und
      b) nicht sehr performant
      Gruß
      Uzu

      private Homepage

      Kommentar


      • #4
        Code:
        preg_split('/\^/',
        ?

        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Original geschrieben von Kropff
          Code:
          preg_split('/\^/',
          ?

          peter
          danke peter

          Code:
          Array (
             [0] => Array ( [0] => Hallo [1] => 0 )
             [1] => Array ( [0] => 5Welt, [1] => 7 )
             [2] => Array ( [0] => 4du [1] => 15 )
             [3] => Array ( [0] => 7bist [1] => 20 )
             [4] => Array ( [0] => 3so [1] => 27 )
             [5] => Array ( [0] => 2schön [1] => 32 )
          )
          bin somit schonmal einen schritt weiter .. jetzt fehlen mir nur noch die ^ davor

          ###

          PHP-Code:
          $array preg_split('/\^/',$code, -1PREG_SPLIT_OFFSET_CAPTURE);
             
          $arr_count count($array);
             
             for (
          $i=0;$i<$arr_count;$i++) {
                if (
          substr($code$array[$i][1]-1,1) == "^") {
                   
          $array[$i][0] = substr($array[$i][0],1);
                   
          $array[$i][2] = "^".substr($array[$i][0],0,1);
                }
                
          print_r($array[$i]);
                echo 
          "<br>";
             } 
          Code:
          Array ( [0] => Hallo [1] => 0 )
          Array ( [0] => Welt, [1] => 7 [2] => ^W )
          Array ( [0] => du [1] => 15 [2] => ^d )
          Array ( [0] => bist [1] => 20 [2] => ^b )
          Array ( [0] => so [1] => 27 [2] => ^s )
          Array ( [0] => schön [1] => 32 [2] => ^s )
          Array ( [0] => ! [1] => 40 [2] => ^! )
          Gruß
          Uzu

          private Homepage

          Kommentar


          • #6
            OffTopic:
            ist einer der admins so nett und gibt mir meine edit rechte wieder? danke


            so .. war zu voreilig

            PHP-Code:
            function splitStr($code) {
               
            $array preg_split('/\^/',$code, -1PREG_SPLIT_OFFSET_CAPTURE);
               
            $arr_count count($array);
               
               for (
            $i=0;$i<$arr_count;$i++) {
                  if (
            substr($code$array[$i][1]-1,1) == "^") {
                     
            $array[$i][0] = substr($array[$i][0],1);
                     
            $array[$i][2] = "^".substr($code,$array[$i][1],1);
                  }
                  
            print_r($array[$i]);
                  echo 
            "<br>";
               }

            Code:
            Array ( [0] => Hallo [1] => 0 )
            Array ( [0] => Welt, [1] => 7 [2] => ^5 )
            Array ( [0] => du [1] => 15 [2] => ^4 )
            Array ( [0] => bist [1] => 20 [2] => ^7 )
            Array ( [0] => so [1] => 27 [2] => ^3 )
            Array ( [0] => schön [1] => 32 [2] => ^2 )
            Array ( [0] => ! [1] => 40 [2] => ^3 )
            würdet ihr das so benutzen oder hättet ihr da verbesserungsvorschläge? ich verwende das mit ajax .. da man sich das zurechtklicken kann und man bei jedem klick die veränderung sehen soll
            Gruß
            Uzu

            private Homepage

            Kommentar


            • #7
              Dein oberes Beispiel ist nicht mehr unbedingt das schnellste. Hast du vieleicht noch etwas genauere Vorgaben wie der String aussieht?
              Ist z.B. das immer nur eine einstellige Zahl? Kommt die immer genau nach einem ^? Kann das ^ auch sonst vorkommen? Hat es da immer einen Abstand davor?

              Kommentar


              • #8
                die ^ sind das "markierungszeichen" dafür das gleich ein spezieler code erscheint.

                es müssen nicht nur zahlen sein, buchstaben und sonderzeichen gehen genauso.

                leerzeichen oder nicht .. ist völlig egal
                Gruß
                Uzu

                private Homepage

                Kommentar


                • #9
                  Re: [PHP5] string anhand eines zeichen zerstückeln

                  Original geschrieben von UzumakiNaruto
                  ... Bsp String:
                  Hallo ^5Welt, ^4du ^7bist ^3so ^2schön!

                  gewünschtes ergebnis:
                  array[0] = "","Hallo";
                  array[1] = "^5","Welt, ";
                  array[2] = "^4", "du";
                  array[3] = "^7", "bist";
                  array[4] = "^3", "so";
                  array[5] = "^2", "schön";

                  explode, preg_split und andere split-funktionen haben mir nicht geholfen
                  Ein preg_split() alleine reicht da wohl nicht:

                  PHP-Code:
                  $blerk 'Hallo ^5Welt, ^4du ^7bist ^3so ^2schön!';
                  // nach "^" splitten:
                  // wenn vor dem "^" mindestens ein Leerzeichen kommen soll
                  $parts preg_split('/\s+(?=\^)/S'$blerk);
                  // wenn das "^" alleiniges Trennzeichen ist
                  //$parts = preg_split('/(?=\^)/S', $blerk);

                  // Teil-Arrays nochmal aufteilen:
                  $array = array ();
                  foreach (
                  $parts as & $value) {
                    
                  //$array[] = preg_split('/(?<=[0-9])(?=[^0-9])/S', $value);
                    
                  $array[] = preg_split('/(?<=\^.)/sS'$value);

                    
                  // Unter-Array auffüllen, falls nicht "gesplitted" wurde
                    
                  $key key($array);
                    if (!isset(
                  $array[$key][1])) {
                      
                  array_unshift($array[$key], '');
                    }

                  (Wie immer den Quellcode aus der Zitatansicht holen, da sieht man die unterschlagenen Backslashes)

                  ... das Ergebnis kommt deinem Wunscharray schon sehr nahe:
                  Code:
                  list(6) {
                    [0] => list(2) {
                      [0] => string(0) ''
                      [1] => string(5) 'Hallo'
                    }
                    [1] => list(2) {
                      [0] => string(2) '^5'
                      [1] => string(5) 'Welt,'
                    }
                    [2] => list(2) {
                      [0] => string(2) '^4'
                      [1] => string(2) 'du'
                    }
                    [3] => list(2) {
                      [0] => string(2) '^7'
                      [1] => string(4) 'bist'
                    }
                    [4] => list(2) {
                      [0] => string(2) '^3'
                      [1] => string(2) 'so'
                    }
                    [5] => list(2) {
                      [0] => string(2) '^2'
                      [1] => string(6) 'schön!'
                    }
                  }
                  Zuletzt geändert von fireweasel; 13.01.2009, 22:23.
                  Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                  Kommentar

                  Lädt...
                  X