• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP - Anzeigen was vor Element steht

Hallo-Welt

Aktives Mitglied
Guten Morgen allerseits,

Der Titel ist villeicht etwas unglücklich formuliert, aber meine Frage ist, mit welcher Funktion ich nachsehen kann, was vor einem bestimmten zeichen im Text steht steht. Also z.B wenn der Input "ABCDEFG" ist, und ich dann z.B. wissen will, was vor oder hinter dem D steht, wie leg ich mich dafür an?
 
Hey,

wie szapi schon sagte strstr Hier mal ein Beispiel:

Code:
$string = "ABCDEFG"; //Dein String
$before_needle = true; //Alles was davor steht (false -> Alles was dahinter steht).
$needle = "D"; //Das D als standpunkt festlegen.

//Alles vor deinem "D" auslesen
$result = strstr($string , $needle , $before_needle);
//Dein Result außgeben
echo $result;
 
Mhh, also die Funktion strstr gibt den gesammten String vor, bzw. nach dem Zeichen aus, nicht nur ein oder zwei Zeichen und ist daher für mein Vorhaben ungeeignet.

Die Funktiom substr ist denke ich da schon eher das, was ich suche. Wäre das denn so etwa wie das hier?
PHP:
$string = "abcdefg";
$find = "d";
echo substr($string, 1, strpos($string, $find));

Als Ausgabe bekomme ich bcd. Das wären dann die ersten zwei Buchstaben vor der Funktion + das gegebene Element. jedoch vermute ich, dass es so noch nicht ganz korrekt ist, liege ich da richtig in meiner Annahme? Wenn ja, was ist falsch?

Und für die beiden hinter dem d, wäre das hier korrekt?
PHP:
$string = "abcdef";
$find = "d";
echo substr($string, -2, strpos($string, $find));
 
Die Zählung beginnt immer bei 0, nicht bei 1. Das erste müsste also heißen:

substr($string, 0,strpos($string,$find));

Das zweite ist nicht korrekt. Das zweite Parameter ist der Startwert, der dritte die Länge. Du kannst den dritten Wert auch weglassen, dann wird bis zum Ende des String gelesen.

So bspw:
substr($string, strpos($string,$find));
 
Zuletzt bearbeitet:
@bdt600 Gibt es immer welche, die stunk machen müssen? Wenn du ihm nicht helfen willst, dann lass es aber finde solche beiträge echt unpassend da es garnicht zum Thema passt.
@Hallo-Welt Kannst dich ja an mein Beispielt halten oder schauen, szapi hat dich ja netterweise verbessert.
 
@eiskaltereistee: Vielen Dank für die Verteidigung :). bdt600 hat's zwar sicher nicht böse gemeint, aber ich bin halt doch eher noch Anfänger in PHP.

@szapi: Oh, danke. Das heißt, das zweite wäre dann so korrekt?
PHP:
$string = "abcdefg";
$find = "d";
echo substr($string, strpos($string,$find), 3);
Als Ausgabe bekomme ich vom Compiler "def", was soweit auch stimmen müsste.
 
Oh, danke. Das heißt, das zweite wäre dann so korrekt?

Sorry, aber ich muss bdt600 recht geben. Probier es doch einfach aus und schau was du für eine Ausgabe erhälst. Anhand der Ausgabe siehst du ja ob dein Ergebnis korrekt ist oder nicht.
Wenn du hier bei jedem Anlauf nachfragst, wirst du nie lernen. Learning by doing.
 
Ist es zuviel verlangt, mal selber etwas auszuprobieren anstatt zu fragen, ob es so richtig sein könnte?
Nein, das ist keineswegs zu viel verlangt. Ich hab's ja auch selbst versucht aufzustellen und auch durch den Compiler gejagt und das Ergebniss sogar hier gepostet. weiterhin hab ich auch weitere Tests mit anderen Inputs und Variationen gemacht um festzustellen, ob mein Code so stimmen kann und bin dann vorhin halt zum Ergebniss gekommen, dass es nicht stimmen kann! Daher frage ich nach "Was ist falsch?".

Ich bin echt jedem dankbar, der mir zu helfen versucht, egal ob einfach nur ein Link, eine Erklärung oder ein Tipp. Aber auf solche Kommentare wie die deinen kann ich dann doch verzichten. Ich bin mir durchaus bewusst, dass du weitaus mehr weißt als ich und du wesentlich mehr Erfahrung mit PHP hast, aber dann beantworte bitte auch Fragen eines höheren Niveaus, statt mich und andere Nutzer runterzureden. Ich danke dir und jedem anderen dafür.

_______________________________________________________________________________________

Ist denn so jetzt alles korret?
 
@bdt600 ich sage nochmal wenn du nicht helfen willst, hoer auf hier so ein quatsch zu Posten und vom Thema ab zulenken. Wenn du nicht helfen willst lass es. Es bringt dir nichts, dieses mist zu posten außer das du damit vom Thema ablenkst.

@Hallo-Welt brauchst du noch weiter Hilfe? Hast du das Problem behoben, wo hängst du?
 
@bdt600 ich sage nochmal wenn du nicht helfen willst, hoer auf hier so ein quatsch zu Posten und vom Thema ab zulenken. Wenn du nicht helfen willst lass es. Es bringt dir nichts, dieses mist zu posten außer das du damit vom Thema ablenkst.
Mir wäre es neu, wenn du mir zu sagen hättest, was ich zu posten habe oder was nicht.

Aber mal ein weiterer Hinweis: Wenn das Trennzeichen nur einmal im String vorkommt, wäre explode auch keine schlechte Funktion.
 
@eiskaltereistee: Danke, ich glaube, dass die beiden Funktionen jetzt richtig sein müssten. Ich habe jetzt einmal:
PHP:
$string = "abcdefg";
$find = "d";
echo substr($string, 1, strpos($string, $find));
Dieses gibt "bcd" aus, also die Eingabe und die zwei Zeichen davor.

Der zweite ist:
PHP:
$string = "abcdefg";
$find = "d";
echo substr($string, strpos($string,$find), 3);
Dieses gibt "def" aus,also die Eingabe und die zwei Zeichen danch.
Ich werde die Funktion dann jetzt mal so umschreiben, dass sie für mein Projekt richtig arbeitet. Ich denke auch, das müsste soweit alles stimmen und wird daher vermutlich kein großes Problem sein.
Wenn noch was falsch sein sollte, bitte einfach kurz hinschreiben (bei der ersten bin ich mir noch nicht so ganz sicher). Ansonsten danke ich dir und auch allen anderen Nutzern, die hier konstruktiv zum Thema beigetragen haben auf jeden Fall aus ganzem Herzen. :p;)
 
Hier. Sollte eigentlich funktionieren. Grad schnell runter geschrieben. Diese Funktion unterscheidet nicht zwischen Groß- und Kleinschreibung, lässt sich allerdings schnell ändern in dem du einfach die entsprechenden Zeilen auskommentierst. Wenn du den Parameter $iDirection auf 0 setzt, werden dir alle Zeichen vor deinem String ausgegeben. Bei 1 wird alles hinter deinem String ausgegeben. Logisch. Sollten sich noch kleine Fehler darin befinden, bitte ich um Entschuldigung.

PHP:
function getSubString($sString, $sNeedle, $iDirection) {
       if(isset($sString, $sNeedle, $iDirection) && (!empty($sString) && !empty($sNeedle))) {

           $sString = strtolower($sString);
           $sNeedle = strtolower($sNeedle);
           $iStringLength = strlen($sString);
           $iPosition = strpos($sString, $sNeedle);

           if($iDirection == 0) {

               $sSubString = substr($sString, 0, $iPosition);
               return $sSubString;

           } else if($iDirection == 1) {

               $sSubString = substr($sString, ($iPosition + 1), $iStringLength);
               return $sSubString;
           }

       }
   }

   $haystack = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   $needle = "d";

   echo getSubString($haystack, $needle, 1);
   echo getSubString($haystack, $needle, 0);
 
@nookie: Danke dafür, jedoch will ich ja eigentlich nur 1-2 Zeichen auslesen. Dann müsste man auch noch die letzten oder ersten Zeichen auslesen, also so:
PHP:
function getSubString($sString, $sNeedle, $iDirection) {
  if(isset($sString, $sNeedle, $iDirection) && (!empty($sString) && !empty($sNeedle))) {
  $sString = strtolower($sString);
  $sNeedle = strtolower($sNeedle);
  $iStringLength = strlen($sString);
  $iPosition = strpos($sString, $sNeedle);
  if($iDirection == 0) {
  $sSubString = substr($sString, 0, $iPosition);
  return $sSubString;
  } else if($iDirection == 1) {
  $sSubString = substr($sString, ($iPosition + 1), $iStringLength);
  return $sSubString;
  }
  }
  }
  $haystack = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  $needle = "d";
  echo "dahinter:\"";
  echo substr(getSubString($haystack, $needle, 1),0 , 1);
  echo "\" - - - ";
  echo "davor:\"";
  echo substr(getSubString($haystack, $needle, 0), -1, 1);
  echo "\"";

Danke aber für den Ansatz. Mir fällt jetzt dann auch auf, dass es ganz einfach mit der Funktion strstr gegangen wäre. Also z.B. so:
PHP:
$text= "abcdefghijklmnopqrstuvwxyz";

echo "davor:\"";
echo substr(strstr($text, 'd', true), -1, 1);
echo "\" - - - dahinter:\"";
echo substr(strstr($text, 'd'),1 , 1);
Es gibt also tatsächlich extrem viele Möglichkeiten, dies umzusetzen. Wenn etwas an meinem Code falsch sein sollte, dann verbessert mich bitte.
 
Zurück
Oben