2016-06-29 12 views
6

Ich möchte Teil einer Zeichenkette finden und wenn true ich die ganze Zeichenfolge ausgeben möchte, die es findet.Finden Sie einen Teil einer Zeichenkette und geben Sie die ganze Zeichenkette aus

Unten ist ein Beispiel:

$Towns = "Eccleston, Aberdeen, Glasgow"; 
$Find = "Eccle"; 

if(strstr($Find, $Towns)){ 
    echo outputWholeString($Find, $Towns); // Result: Eccleston. 
} 

Wenn jemand etwas Licht auf vergießen kann, wie dies auch zu tun, und daran denkt, dass es nicht statische Werte sein wird; Die Variablen $Towns und $Find werden in meinem Live-Skript dynamisch zugewiesen.

+0

Die Syntax ist 'strstr ($ haystack, $ nadel)', also meinst du wahrscheinlich 'strstr ($ Towns, $ Find)' anstelle von 'strstr ($ Find, $ Towns)' – PaulH

Antwort

5

Verwenden explode() und strpos() als

$Towns = "Eccleston, Aberdeen, Glasgow"; 
$data=explode(",",$Towns);// 
$Find = "Eccle"; 
foreach ($data as $town) 
if (strpos($town, $Find) !== false) { 
    echo $town; 
} 

DEMO

+0

Mit 'explode()', wird die Zeichenfolge in ein Array konvertiert und das Array wird gesucht pro Stück. Die 'preg_match()' Lösung konvertiert nicht in ein Array, aber die Suche ist komplexer. – PaulH

1

Sie fast da ...

waren

Dies ist wahrscheinlich das, was Sie suchen,:

<?php 
$Towns = "Eccleston, Aberdeen, Glasgow"; 
$Find = "Eccle"; 

if(stripos($Towns, $Find)) { 
    echo $Towns; 
} 

Die Ausgabe lautet: Eccleston, Aberdeen, Glasgow was, was ich „die ganze Zeichenfolge“ nennen würde.


Wenn Sie jedoch nur ausgegeben werden sollen, die zum Teil Teil „der ganzen Reihe“ abgestimmt, dann in diesem Beispiel einen Blick:

<?php 
$Towns = "Eccleston, Aberdeen, Glasgow"; 
$Find = "Eccle"; 

foreach (explode(',', $Towns) as $Town) { 
    if(stripos($Town, $Find)) { 
     echo trim($Town); 
    } 
} 

Der Ausgang dass offensichtlich ist: Eccleston ...

Zwei allgemeine Bemerkungen:

  1. Die strpos()/stripos() Funktionen sind hier besser geeignet, da sie nur eine Position anstelle der gesamten übereinstimmenden Zeichenfolge zurückgeben, die für den angegebenen Zweck ausreicht.

  2. die Verwendung von stripos() statt strpos() eine Groß- und Kleinschreibung Suche durchführt, die wahrscheinlich Sinn für die Aufgabe macht ...

+1

Ich denke, er will Ausgabe Eccleston nicht die ganze Zeichenfolge. – Swolschblauw

+0

@Swolschblauw Nicht sicher, aber ich habe eine modifizierte Version in diese Richtung hinzugefügt. Danke, dass du diese Ansicht erwähnt hast ... – arkascha

+0

@Swolschblauw, danke, das habe ich zuerst nicht verstanden. – PaulH

1

preg_match() Verwendung ist es möglich, für Eccle und senden Sie das Eccleston Wort suchen .

Ich verwende den Pearl Compatible Regular Expression (PCRE) '#\w*' . $Find . '\w*#' im folgenden Code und den demo Code.

Die Zeichen sind PCRE-Trennzeichen. Das gesuchte Muster befindet sich innerhalb dieser Begrenzer. Manche Leute bevorzugen / als Trennzeichen.
Die \w zeigt Wort Zeichen.
Die * zeigt 0 oder mehr Wiederholungen des vorherigen Zeichens an.
So sucht die #\w*Eccle\w*# PCRE für eine Zeichenfolge Eccle durch ein oder mehrere Wort Zeichen (Buchstaben)

<?php 
$Towns = "Eccleston, Aberdeen, Glasgow"; 
$Find = "Eccle"; 

if (preg_match('#\w*' . $Find . '\w*#', $Towns, $matches)) { 
    print_r($matches[0]); 
} 
?> 

Lauf Code umgeben enthält: http://sandbox.onlinephpfunctions.com/code/4e4026cbbd93deaf8fef0365a7bc6cf6eacc2014

Hinweis: '#\w*' . $Find . '\w*#' ist die gleiche wie "#\w*$Find\w*#" (Beachten Sie die umgebenden einfachen oder doppelten Anführungszeichen). Siehe .

+1

Dies wird sicherlich nicht ausgegeben "Eccleston" ... – arkascha

+0

@arkascha Ich habe die Frage zunächst nicht vollständig verstanden, ist die Lösung angepasst – PaulH

1

Sie haben strpos() verwenden, um eine Zeichenfolge innerhalb einer anderen zu suchen:

if(strpos($Towns, $Find) === false) { 
    echo $Towns; 
} 

Beachten Sie, dass Sie verwenden müssen „===“ zu wissen, ob strpos() false zurückgegeben oder 0

1

Die Lösung preg_match Funktion: Unter der Annahme,

$Towns = "Eccleston, Aberdeen, Glasgow"; 
$Find = "Eccle"; 

preg_match("/\b\w*?$Find\w*?\b/", $Towns, $match); 
$result = (!empty($match))? $match[0] : ""; 

print_r($result); // "Eccleston" 
+0

@PaulH, du liegst falsch. Überprüfen Sie Ihren Test-Code auf Tippfehler ... und lesen Sie über Variableninterpolation – RomanPerekhrest

+0

Das PCRE Nähte übermäßig komplex für mich, warum nicht '"/\ w * $ Find \ w */"' – PaulH

+0

Sie vergaß ungerechte Operatoren und Wortgrenzen – RomanPerekhrest

1

, dass Sie immer getrennt $ Städte haben werden „“ dann könnte man einmal so etwas wie diese

$Towns = "Eccleston, Aberdeen, Glasgow"; 
$Find = "Eccle";  
$TownsArray = explode(", ", $Towns); 

    foreach($TownsArray as $Town) 
    { 
     if(stristr($Find, $Town)) 
     { 
      echo $Town; break; 
     } 
    } 

Den obigen Code gibt die Stadt tun es findet die Nadel und verlässt die foreach-Schleife. Du könntest die "Pause" entfernen; um das Skript weiterlaufen zu lassen, um zu sehen, ob es mehr Ergebnisse findet.

Verwandte Themen