Bruzz: strpos - help

Hallo zusammen,

ich habe eine Excel die ich mit PHP auslesen möchte.
Darin ist z.b. eine Zelle in Spalte 3:
Blabla Diesdas black/black/white

Gibt es eine Möglichkeit, so dass ich mit strpos nur den ersten Wert vor dem Slash auslese? Also quasi vom ersten Slash soviele Buchstaben rückwärts bis ein Leerzeichen kommt?

Danke für Hilfe und Grüße

  1. Hallo zusammen,

    ich habe eine Excel die ich mit PHP auslesen möchte.
    Darin ist z.b. eine Zelle in Spalte 3:
    Blabla Diesdas black/black/white

    Gibt es eine Möglichkeit, so dass ich mit strpos nur den ersten Wert vor dem Slash auslese? Also quasi vom ersten Slash soviele Buchstaben rückwärts bis ein Leerzeichen kommt?

    Danke für Hilfe und Grüße

    Wie wäre es hiermit:

    $string = "Blabla Diesdas black/black/white"

    $string = explode(" ", $string);

    $slashwerte = split("/", $string[2]); // wohl wissend, dass ich jetzt von den Hütern der Orthodoxie wieder einen auf die Mütze bekomme, von wegen "Regular Expression-Funktionen nach POSIX-Standard sind seit PHP 5.3 veraltet"...

    $ersterWert = $slashwerte[0];

    Bis bald im Khyberspace!

    Yadgar

    Now playing: The Calling (Yes)

    1. Wie wäre es hiermit:

      $string = "Blabla Diesdas black/black/white"

      $string = explode(" ", $string);

      $slashwerte = split("/", $string[2]); // wohl wissend, dass ich jetzt von den Hütern der Orthodoxie wieder einen auf die Mütze bekomme, von wegen "Regular Expression-Funktionen nach POSIX-Standard sind seit PHP 5.3 veraltet"...

      $ersterWert = $slashwerte[0];

      Hallo,

      erstmal danke für deine Hilfe, das hat mich schon näher gebracht, alledings hätte ich noch genauer werden müssen. Bspw. sind nicht immer 3 Farben angegeben. es kann auch so heissen
      Blabla Dingdong black/blue
      Blabla Dingdong blue
      Blabla DIngdong blue/white/black

      diese 3 Kombis sind möglich.
      Mit deiner Lösung klappt es nur teilweise leider :(

      VG

      1. High!

        erstmal danke für deine Hilfe, das hat mich schon näher gebracht, alledings hätte ich noch genauer werden müssen. Bspw. sind nicht immer 3 Farben angegeben. es kann auch so heissen
        Blabla Dingdong black/blue
        Blabla Dingdong blue
        Blabla DIngdong blue/white/black

        diese 3 Kombis sind möglich.
        Mit deiner Lösung klappt es nur teilweise leider :(

        VG

        Dann halt so:

        $string = explode(" ", $string);
        if (strchr("/", $string[2]))
        {
          $slashwerte = split("/", $string[2]);
          $ersterWert = $slashwerte[0];
        }
        else $ersterWert = $string[2];

        Bis bald im Khyberspace!

        Yadgar

      2. Hi!

        alledings hätte ich noch genauer werden müssen. Bspw. sind nicht immer 3 Farben angegeben. es kann auch so heissen
        Blabla Dingdong black/blue
        Blabla Dingdong blue
        Blabla DIngdong blue/white/black

        Wie heißt also die eigentliche Regel? Vom letzten Leerzeichen alles bis Stringende oder bis zum ersten /? Unter der Voraussetzung, dass nicht auch noch Leerzeichen in den Farbnamen auftauchen, kannst du erstmal die Position des letzten Leerzeichens ermitteln und den Teilstring danach extrahieren. Wenn dann noch ein / enthalten ist, den Teilstring bis dorthin nehmen.

        Oder weiterhin mit einem regulären Ausdruck, allerdings ein wenig erweitert: ein Leerzeichen, gefolgt von Nicht-Leerzeichen und Nicht-/ gefolgt von / oder String-Ende suchen und davon den Mittelteil verwenden.

        Lo!

        1. Wie heißt also die eigentliche Regel? Vom letzten Leerzeichen alles bis Stringende oder bis zum ersten /?

          Genau, das ist die regel. Nach dem letzten Leerzeichen soll das nachfolgende Wort entweder ganz genommen werden oder bis zum ersten Slash/

          Unter der Voraussetzung, dass nicht auch noch Leerzeichen in den Farbnamen auftauchen, kannst du erstmal die Position des letzten Leerzeichens ermitteln und den Teilstring danach extrahieren. Wenn dann noch ein / enthalten ist, den Teilstring bis dorthin nehmen.

          Na gut dann kämpf ich mich da mla durch :)
          Danke

          1. Denken vor dem Schreiben :)
            So gehts richtig:
              $farbe_neu = strrchr ($data->val($i,'C'), ' ');
              echo $farbe_neu.'<br />';
              $slashposition= strpos ($farbe_neu, '/');
              if(strpos($farbe_neu, '/')){
              $farbe = ucfirst(strtolower(substr($farbe_neu, 0, $slashposition))); }
              else{
                      $farbe = ucfirst(strtolower($farbe_neu));
                      }

        2. Wie heißt also die eigentliche Regel? Vom letzten Leerzeichen alles bis Stringende oder bis zum ersten /? Unter der Voraussetzung, dass nicht auch noch Leerzeichen in den Farbnamen auftauchen, kannst du erstmal die Position des letzten Leerzeichens ermitteln und den Teilstring danach extrahieren. Wenn dann noch ein / enthalten ist, den Teilstring bis dorthin nehmen.

          Hm ich habs jetzt mal probiert, aber mir werden nur Zahlen ausgegeben?
          Jemand ne Idee?

            
          // Farbe  
          		  $leerzeichen = strrchr ($data->val($i,'C'), ' ');  
          		  $farbe_neu = strpos ($data->val($i,'C'), $leerzeichen);  
          		  echo $farbe_neu.'<br />';  
          		  $slashposition= strpos ($farbe_neu, '/');  
          		  if(strpos($farbe_neu, '/')){  
          		  $farbe = ucfirst(strtolower(substr($farbe_neu, 0, $slashposition))); }  
          		  else{  
                    $farbe = ucfirst(strtolower($farbe_neu));  
                    }  
          
          
      3. Moin!

        diese 3 Kombis sind möglich.
        Mit deiner Lösung klappt es nur teilweise leider :(

        Du splittest zu erst am Slash, nimm das erste Element.
        Du splittest jetzt am Leerzeichen und nimmst den letzten Teil.

        $ar=explode('/', $str, 2);  
        $ar=array_reverse(explode(' ', $ar[0]));  
        return $ar[0];
        

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix

  2. Hi!

    Blabla Diesdas black/black/white
    Gibt es eine Möglichkeit, so dass ich mit strpos nur den ersten Wert vor dem Slash auslese? Also quasi vom ersten Slash soviele Buchstaben rückwärts bis ein Leerzeichen kommt?

    strpos() kann aus einem String nichts auslesen, nur die Position von Zeichen ermitteln. Damit kannst du das erste Vorkommen des / ermitteln. Um von da rückwärts die Position des Leerzeichens zu ermitteln, kann dir strrpos() helfen, dem du als Offset den Abstand zwischen / und Stringende mitteilst, mit negativem Vorzeichen.

    Alternativ kannst du auch mit einem regulären Ausdruck ein Leerzeichen, gefolgt von Nicht-Leerzeichen und Nicht-/ gefolgt von / suchen und davon den Mittelteil verwenden.

    Lo!