it-swarm.it

Come posso verificare se una stringa contiene una parola specifica?

Tenere conto:

$a = 'How are you?';

if ($a contains 'are')
    echo 'true';

Supponiamo di avere il codice sopra, qual è il modo corretto di scrivere la dichiarazione if ($a contains 'are')?

2666
Charles Yeung

Puoi usare la funzione strpos() che è usata per trovare l'occorrenza di una stringa all'interno di un'altra:

$a = 'How are you?';

if (strpos($a, 'are') !== false) {
    echo 'true';
}

Si noti che l'uso di !== false è deliberato; strpos() restituisce l'offset con cui inizia la stringa dell'ago nella stringa haystack, oppure il false booleano__ se l'ago non viene trovato. Poiché 0 è un offset valido e 0 è "falsey", non possiamo usare costrutti più semplici come !strpos($a, 'are').

6129
codaddict

È possibile utilizzare le espressioni regolari, è meglio per la corrispondenza di parole rispetto a strpos come menzionato da altri utenti, esso restituirà anche true per le stringhe come tariffa, cura, fissa, ecc. Questo può essere semplicemente evitato nell'espressione regolare usando i limiti di Word.

Una corrispondenza semplice per potrebbe essere simile a questa:

$a = 'How are you?';

if (preg_match('/\bare\b/', $a)) {
    echo 'true';
}

Sul versante delle prestazioni, strpos è circa tre volte più veloce e ha in mente, quando ho fatto un milione di confronti contemporaneamente, ci sono voluti preg_match 1,5 secondi per terminare e per strpos ci sono voluti 0,5 secondi.

Modifica: per cercare qualsiasi parte della stringa, non solo Word per Word, raccomanderei l'uso di un'espressione regolare come

$a = 'How are you?';
$search 'are y';
if(preg_match("/{$search}/i", $a)) {
    echo 'true';
}

Il i alla fine dell'espressione regolare cambia l'espressione regolare in modo da non distinguere tra maiuscole e minuscole, se non lo vuoi, puoi lasciarlo fuori.

Ora, questo può essere piuttosto problematico in alcuni casi dato che la stringa di ricerca $ non è disinfettata in alcun modo, voglio dire, potrebbe non passare il controllo in alcuni casi come se $search sia un input dell'utente che possa aggiungere una stringa che potrebbe comportarsi come alcune espressioni regolari diverse ...

Inoltre, ecco un ottimo strumento per testare e vedere le spiegazioni di varie espressioni regolari Regex101

Per combinare entrambe le serie di funzionalità in un'unica funzione multiuso (inclusa la distinzione tra maiuscole e minuscole selezionabile), è possibile utilizzare qualcosa di simile:

function FindString($needle,$haystack,$i,$Word)
{   // $i should be "" or "i" for case insensitive
    if (strtoupper($Word)=="W")
    {   // if $Word is "W" then Word search instead of string in string search.
        if (preg_match("/\b{$needle}\b/{$i}", $haystack)) 
        {
            return true;
        }
    }
    else
    {
        if(preg_match("/{$needle}/{$i}", $haystack)) 
        {
            return true;
        }
    }
    return false;
    // Put quotes around true and false above to return them as strings instead of as bools/ints.
}
528
Breezer

Ecco una piccola funzione di utilità che è utile in situazioni come questa

// returns true if $needle is a substring of $haystack
function contains($needle, $haystack)
{
    return strpos($haystack, $needle) !== false;
}
228
ejunker

Mentre la maggior parte di queste risposte ti dirà se una sottostringa appare nella tua stringa, di solito non è quello che vuoi se stai cercando un particolare Word , e non a substring .

Qual è la differenza? Le sottostringhe possono apparire in altre parole:

  • I "sono" all'inizio di "area"
  • I "sono" alla fine di "lepre"
  • Il "sono" nel mezzo di "tariffe"

Un modo per mitigare questo sarebbe usare un'espressione regolare accoppiata con Limiti di Word (\b):

function containsWord($str, $Word)
{
    return !!preg_match('#\\b' . preg_quote($Word, '#') . '\\b#i', $str);
}

Questo metodo non ha gli stessi falsi positivi sopra riportati, ma ha alcuni casi di Edge. I limiti di parole corrispondono a caratteri non di Word (\W), che saranno qualsiasi cosa che non sia a-z, A-Z, 0-9 o _. Ciò significa che cifre e caratteri di sottolineatura verranno contati come caratteri di Word e scenari come questo non funzioneranno:

  • I "sono" in "Cosa stai pensando?"
  • I "sono" in "non lo so, quelli sono4?"

Se vuoi qualcosa di più accurato di questo, dovrai iniziare a fare l'analisi della sintassi della lingua inglese, e questo è un grande potenziale di worm (e presuppone comunque un uso corretto della sintassi, che non è sempre un dato).

128
FtDRbwLXw6

Per determinare se una stringa contiene un'altra stringa puoi usare PHP function strpos () .

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

<?php

$haystack = 'how are you';
$needle = 'are';

if (strpos($haystack,$needle) !== false) {
    echo "$haystack contains $needle";
}

?>

ATTENZIONE:

Se l'ago che stai cercando si trova all'inizio del pagliaio restituirà la posizione 0, se fai un confronto == che non funzionerà, dovrai fare un ===

Un segno == è un confronto e verifica se la variabile/espressione/costante a sinistra ha lo stesso valore della variabile/espressione/costante a destra.

Un segno === è un confronto per vedere se due variabili/espressioni/costanti sono uguali AND hanno lo stesso tipo - cioè entrambe sono stringhe o entrambi sono numeri interi.

109
Jose Vega

Guarda strpos() :

<?php
    $mystring = 'abc';
    $findme   = 'a';
    $pos = strpos($mystring, $findme);

    // Note our use of ===. Simply, == would not work as expected
    // because the position of 'a' was the 0th (first) character.
    if ($pos === false) {
        echo "The string '$findme' was not found in the string '$mystring'.";
    }
    else {
        echo "The string '$findme' was found in the string '$mystring',";
        echo " and exists at position $pos.";
    }
?>
59
Haim Evgi

Usare strstr() o stristr() se la ricerca dovrebbe essere insensibile alle maiuscole/minuscole sarebbe un'altra opzione.

58
glutorange

Peer to SamGoody e Lego Stormtroopr commenta.

Se stai cercando un PHP algoritmo per classifica i risultati di ricerca in base alla prossimità/rilevanza di più parole ecco un modo semplice e veloce per generare risultati di ricerca con PHP solo:

Problemi con gli altri metodi di ricerca booleani come strpos(), preg_match(), strstr() o stristr()

  1. non è possibile cercare più parole
  2. i risultati non sono classificati

PHP metodo basato su Vector Space Model e tf-idf (frequenza del documento inverso frequenza-frequenza):

Sembra difficile ma è sorprendentemente facile.

Se vogliamo cercare più parole in una stringa, il problema principale è come assegniamo un peso a ciascuna di esse?

Se potessimo ponderare i termini in una stringa in base a quanto rappresentativi della stringa nel suo insieme, potremmo ordinare i nostri risultati con quelli che corrispondono meglio alla query.

Questa è l'idea del modello di spazio vettoriale, non lontano da come funziona la ricerca full-text di SQL:

function get_corpus_index($corpus = array(), $separator=' ') {

    $dictionary = array();

    $doc_count = array();

    foreach($corpus as $doc_id => $doc) {

        $terms = explode($separator, $doc);

        $doc_count[$doc_id] = count($terms);

        // tf–idf, short for term frequency–inverse document frequency, 
        // according to wikipedia is a numerical statistic that is intended to reflect 
        // how important a Word is to a document in a corpus

        foreach($terms as $term) {

            if(!isset($dictionary[$term])) {

                $dictionary[$term] = array('document_frequency' => 0, 'postings' => array());
            }
            if(!isset($dictionary[$term]['postings'][$doc_id])) {

                $dictionary[$term]['document_frequency']++;

                $dictionary[$term]['postings'][$doc_id] = array('term_frequency' => 0);
            }

            $dictionary[$term]['postings'][$doc_id]['term_frequency']++;
        }

        //from http://phpir.com/simple-search-the-vector-space-model/

    }

    return array('doc_count' => $doc_count, 'dictionary' => $dictionary);
}

function get_similar_documents($query='', $corpus=array(), $separator=' '){

    $similar_documents=array();

    if($query!=''&&!empty($corpus)){

        $words=explode($separator,$query);

        $corpus=get_corpus_index($corpus, $separator);

        $doc_count=count($corpus['doc_count']);

        foreach($words as $Word) {

            if(isset($corpus['dictionary'][$Word])){

                $entry = $corpus['dictionary'][$Word];


                foreach($entry['postings'] as $doc_id => $posting) {

                    //get term frequency–inverse document frequency
                    $score=$posting['term_frequency'] * log($doc_count + 1 / $entry['document_frequency'] + 1, 2);

                    if(isset($similar_documents[$doc_id])){

                        $similar_documents[$doc_id]+=$score;

                    }
                    else{

                        $similar_documents[$doc_id]=$score;

                    }
                }
            }
        }

        // length normalise
        foreach($similar_documents as $doc_id => $score) {

            $similar_documents[$doc_id] = $score/$corpus['doc_count'][$doc_id];

        }

        // sort from  high to low

        arsort($similar_documents);

    }   

    return $similar_documents;
}

CASO 1

$query = 'are';

$corpus = array(
    1 => 'How are you?',
);

$match_results=get_similar_documents($query,$corpus);
echo '<pre>';
    print_r($match_results);
echo '</pre>';

RESULT

Array
(
    [1] => 0.52832083357372
)

CASO 2

$query = 'are';

$corpus = array(
    1 => 'how are you today?',
    2 => 'how do you do',
    3 => 'here you are! how are you? Are we done yet?'
);

$match_results=get_similar_documents($query,$corpus);
echo '<pre>';
    print_r($match_results);
echo '</pre>';

RISULTATI

Array
(
    [1] => 0.54248125036058
    [3] => 0.21699250014423
)

CASO 3

$query = 'we are done';

$corpus = array(
    1 => 'how are you today?',
    2 => 'how do you do',
    3 => 'here you are! how are you? Are we done yet?'
);

$match_results=get_similar_documents($query,$corpus);
echo '<pre>';
    print_r($match_results);
echo '</pre>';

RISULTATI

Array
(
    [3] => 0.6813781191217
    [1] => 0.54248125036058
)

Ci sono molti miglioramenti da apportare ma il modello fornisce un modo per ottenere buoni risultati dalle query naturali, che non hanno operatori booleani come strpos(), preg_match(), strstr() o stristr().

NOTA BENE

Se si desidera eliminare la ridondanza prima di cercare le parole

  • riducendo così la dimensione dell'indice e riducendo i requisiti di stoccaggio

  • meno I/O su disco

  • indicizzazione più veloce e una ricerca di conseguenza più veloce.

1. Normalizzazione

  • Converti tutto il testo in minuscolo

2. Eliminazione di Stopword

  • Elimina le parole dal testo che non hanno alcun significato reale (come 'e', ​​'o', 'il', 'per', ecc.)

3. Sostituzione del dizionario

  • Sostituisci le parole con altre che hanno un significato identico o simile. (es .: sostituire le istanze di "affamato" e "affamato" con "fame")

  • Ulteriori misure algoritmiche (Palla di neve) possono essere eseguite per ridurre ulteriormente le parole al loro significato essenziale.

  • La sostituzione dei nomi dei colori con i loro equivalenti esadecimali

  • La riduzione dei valori numerici riducendo la precisione sono altri modi per normalizzare il testo.

RISORSE

43
RafaSashi

Se si desidera evitare il problema "falso" e "verità", è possibile utilizzare substr_count:

if (substr_count($a, 'are') > 0) {
    echo "at least one 'are' is present!";
}

È un po 'più lento degli strpos, ma evita i problemi di confronto.

40
Alan Piralla

Un'altra opzione è usare la funzione strstr () . Qualcosa di simile a:

if (strlen(strstr($haystack,$needle))>0) {
// Needle Found
}

Punto da notare: la funzione strstr () è sensibile al maiuscolo/minuscolo. Per una ricerca senza distinzione tra maiuscole e minuscole, utilizzare la funzione stristr () .

31
YashG99

Sono un po 'impressionato dal fatto che nessuna delle risposte qui abbia usato strpos, strstr e funzioni simili menzionate Multibyte String Functions yet (2015-05-08).

In sostanza, se sei avendo problemi a trovare parole con caratteri specifici per alcune lingue , come tedesco, francese, portoghese, spagnolo, ecc. (Ad esempio: ä, é, ô, ç, º, ñ), potresti voler precedere le funzioni con mb_. Pertanto, la risposta accettata dovrebbe utilizzare mb_strpos o mb_stripos (per la corrispondenza senza distinzione tra maiuscole e minuscole) invece:

if (mb_strpos($a,'are') !== false) {
    echo 'true';
}

Se non puoi garantire che tutti i tuoi dati sono al 100% in UTF-8 , potresti voler usare le funzioni mb_.

Un buon articolo per capire perché è Lo sviluppatore minimo assoluto Ogni sviluppatore di software deve assolutamente conoscere positivamente Unicode e Set di caratteri (nessuna scusa!) by Joel Spolsky.

28
Armfoot
if (preg_match('/(are)/', $a)) {
   echo 'true';
}
28
joan16v

La funzione seguente funziona anche e non dipende da altre funzioni; usa solo la manipolazione stringa nativa PHP. Personalmente, non lo consiglio, ma puoi vedere come funziona:

<?php

if (!function_exists('is_str_contain')) {
  function is_str_contain($string, $keyword)
  {
    if (empty($string) || empty($keyword)) return false;
    $keyword_first_char = $keyword[0];
    $keyword_length = strlen($keyword);
    $string_length = strlen($string);

    // case 1
    if ($string_length < $keyword_length) return false;

    // case 2
    if ($string_length == $keyword_length) {
      if ($string == $keyword) return true;
      else return false;
    }

    // case 3
    if ($keyword_length == 1) {
      for ($i = 0; $i < $string_length; $i++) {

        // Check if keyword's first char == string's first char
        if ($keyword_first_char == $string[$i]) {
          return true;
        }
      }
    }

    // case 4
    if ($keyword_length > 1) {
      for ($i = 0; $i < $string_length; $i++) {
        /*
        the remaining part of the string is equal or greater than the keyword
        */
        if (($string_length + 1 - $i) >= $keyword_length) {

          // Check if keyword's first char == string's first char
          if ($keyword_first_char == $string[$i]) {
            $match = 1;
            for ($j = 1; $j < $keyword_length; $j++) {
              if (($i + $j < $string_length) && $keyword[$j] == $string[$i + $j]) {
                $match++;
              }
              else {
                return false;
              }
            }

            if ($match == $keyword_length) {
              return true;
            }

            // end if first match found
          }

          // end if remaining part
        }
        else {
          return false;
        }

        // end for loop
      }

      // end case4
    }

    return false;
  }
}

Test:

var_dump(is_str_contain("test", "t")); //true
var_dump(is_str_contain("test", "")); //false
var_dump(is_str_contain("test", "test")); //true
var_dump(is_str_contain("test", "testa")); //flase
var_dump(is_str_contain("a----z", "a")); //true
var_dump(is_str_contain("a----z", "z")); //true 
var_dump(is_str_contain("mystringss", "strings")); //true 
23
Jason OOO

In PHP, il modo migliore per verificare se una stringa contiene una determinata sottostringa, è utilizzare una semplice funzione di supporto come questa:

function contains($haystack, $needle, $caseSensitive = false) {
    return $caseSensitive ?
            (strpos($haystack, $needle) === FALSE ? FALSE : TRUE):
            (stripos($haystack, $needle) === FALSE ? FALSE : TRUE);
}

Spiegazione:

  • strpos trova la posizione della prima occorrenza di una sottostringa sensibile al maiuscolo/minuscolo in una stringa.
  • stripos trova la posizione della prima occorrenza di una sottostringa senza distinzione tra maiuscole e minuscole in una stringa.
  • myFunction($haystack, $needle) === FALSE ? FALSE : TRUE assicura che myFunction restituisca sempre un valore booleano e corregge un comportamento imprevisto quando l'indice della sottostringa è 0.
  • $caseSensitive ? A : B seleziona strpos o stripos per eseguire il lavoro, a seconda del valore di $caseSensitive.

Produzione:

var_dump(contains('bare','are'));            // Outputs: bool(true)
var_dump(contains('stare', 'are'));          // Outputs: bool(true)
var_dump(contains('stare', 'Are'));          // Outputs: bool(true)
var_dump(contains('stare', 'Are', true));    // Outputs: bool(false)
var_dump(contains('hair', 'are'));           // Outputs: bool(false)
var_dump(contains('aren\'t', 'are'));        // Outputs: bool(true)
var_dump(contains('Aren\'t', 'are'));        // Outputs: bool(true)
var_dump(contains('Aren\'t', 'are', true));  // Outputs: bool(false)
var_dump(contains('aren\'t', 'Are'));        // Outputs: bool(true)
var_dump(contains('aren\'t', 'Are', true));  // Outputs: bool(false)
var_dump(contains('broad', 'are'));          // Outputs: bool(false)
var_dump(contains('border', 'are'));         // Outputs: bool(false)
22
John Slegers

Puoi usare la funzione strstr:

$haystack = "I know programming";
$needle   = "know";
$flag = strstr($haystack, $needle);

if ($flag){

    echo "true";
}

Senza utilizzare una funzione incorporata:

$haystack  = "hello world";
$needle = "llo";

$i = $j = 0;

while (isset($needle[$i])) {
    while (isset($haystack[$j]) && ($needle[$i] != $haystack[$j])) {
        $j++;
        $i = 0;
    }
    if (!isset($haystack[$j])) {
        break;
    }
    $i++;
    $j++;

}
if (!isset($needle[$i])) {
    echo "YES";
}
else{
    echo "NO ";
}
21
Arshid KV

Ho avuto qualche problema con questo, e alla fine ho scelto di creare la mia soluzione. Senza usare espressione regolare motore:

function contains($text, $Word)
{
    $found = false;
    $spaceArray = explode(' ', $text);

    $nonBreakingSpaceArray = explode(chr(160), $text);

    if (in_array($Word, $spaceArray) ||
        in_array($Word, $nonBreakingSpaceArray)
       ) {

        $found = true;
    }
    return $found;
 }

Si può notare che le soluzioni precedenti non sono una risposta per la parola utilizzata come prefisso per un'altra. Per utilizzare il tuo esempio:

$a = 'How are you?';
$b = "a skirt that flares from the waist";
$c = "are";

Con gli esempi sopra, sia $a che $b contiene $c, ma è possibile che la funzione ti dica che solo $a contiene $c.

21
Decebal

Un'altra opzione per trovare l'occorrenza di una parola da una stringa usando strstr () e stristr () è come la seguente:

<?php
    $a = 'How are you?';
    if (strstr($a,'are'))  // Case sensitive
        echo 'true';
    if (stristr($a,'are'))  // Case insensitive
        echo 'true';
?>
16
Sadikhasan

Per trovare una "Parola", piuttosto che l'occorrenza di una serie di lettere che potrebbero in realtà essere una parte di un'altra Parola, la seguente sarebbe una buona soluzione.

$string = 'How are you?';
$array = explode(" ", $string);

if (in_array('are', $array) ) {
    echo 'Found the Word';
}
14
DJC

Può essere fatto in tre modi diversi:

 $a = 'How are you?';

1- stristr ()

 if (strlen(stristr($a,"are"))>0) {
    echo "true"; // are Found
 } 

2- strpos ()

 if (strpos($a, "are") !== false) {
   echo "true"; // are Found
 }

3- preg_match ()

 if( preg_match("are",$a) === 1) {
   echo "true"; // are Found
 }
14
Shashank Singh

La versione a mano corta

$result = false!==strpos($a, 'are');
14

Dovresti usare il formato Case sensitive, quindi se il valore inserito è in small o caps non importa.

<?php
$grass = "This is pratik joshi";
$needle = "pratik";
if (stripos($grass,$needle) !== false) { 

 /*If i EXCLUDE : !== false then if string is found at 0th location, 
   still it will say STRING NOT FOUND as it will return '0' and it      
   will goto else and will say NOT Found though it is found at 0th location.*/
    echo 'Contains Word';
}else{
    echo "does NOT contain Word";
}
?>

Qui stripos trova un ago in heystack without considerando case (small/caps).

Esempio di PHPCode con output

13
Pratik C Joshi

Molte risposte che usano substr_count verificano se il risultato è >0. Ma dal momento che l'istruzione if considera zero il stesso di false , puoi evitare di controllare e scrivere direttamente:

if (substr_count($a, 'are')) {

Per verificare se not present, aggiungi l'operatore !:

if (!substr_count($a, 'are')) {
13
T30

Forse potresti usare qualcosa del genere:

<?php
    findWord('Test all OK');

    function findWord($text) {
        if (strstr($text, 'ok')) {
            echo 'Found a Word';
        }
        else
        {
            echo 'Did not find a Word';
        }
    }
?>
12
Mathias Stavrou

Non utilizzare preg_match() se si desidera solo verificare se una stringa è contenuta in un'altra stringa. Usa strpos() o strstr() invece che saranno più veloci. ( http://in2.php.net/preg_match )

if (strpos($text, 'string_name') !== false){
   echo 'get the string';
}
11
Vinod Joshi

Se vuoi verificare se la stringa contiene più parole specifiche, puoi fare:

$badWords = array("dette", "capitale", "rembourser", "ivoire", "mandat");

$string = "a string with the Word ivoire";

$matchFound = preg_match_all("/\b(" . implode($badWords,"|") . ")\b/i", $string, $matches);

if ($matchFound) {
    echo "a bad Word has been found";
}
else {
    echo "your string is okay";
}

Questo è utile per evitare lo spam durante l'invio di e-mail, ad esempio.

10
Julien

È necessario utilizzare operatori identici/non identici poiché lo strpos può restituire 0 come valore dell'indice. Se ti piacciono gli operatori ternari, considera l'utilizzo di quanto segue (sembra un po 'arretrato, lo ammetto):

echo FALSE === strpos($a,'are') ? 'false': 'true';
9
Shapeshifter

La funzione strpos funziona bene, ma se si desidera eseguire case-insensitive per verificare una parola in un paragrafo, è possibile utilizzare la funzione stripos di PHP.

Per esempio,

$result = stripos("I love PHP, I love PHP too!", "php");
if ($result === false) {
    // Word does not exist
}
else {
    // Word exists
}

Trova la posizione della prima occorrenza di una sottostringa senza distinzione tra maiuscole e minuscole in una stringa.

Se la Parola non esiste nella stringa, restituirà false altrimenti restituirà la posizione della Parola.

9
Akshay Khale

Controlla se la stringa contiene parole specifiche?

Ciò significa che la stringa deve essere risolta in parole (vedi nota sotto).

Un modo per farlo e per specificare i separatori sta usando preg_split ( doc ):

<?php

function contains_Word($str, $Word) {
  // split string into words
  // separators are substrings of at least one non-Word character
  $arr = preg_split('/\W+/', $str, NULL, PREG_SPLIT_NO_EMPTY);

  // now the words can be examined each
  foreach ($arr as $value) {
    if ($value === $Word) {
      return true;
    }
  }
  return false;
}

function test($str, $Word) {
  if (contains_Word($str, $Word)) {
    echo "string '" . $str . "' contains Word '" . $Word . "'\n";
  } else {
    echo "string '" . $str . "' does not contain Word '" . $Word . "'\n" ;
  }
}

$a = 'How are you?';

test($a, 'are');
test($a, 'ar');
test($a, 'hare');

?>

Una corsa dà

$ php -f test.php                   
string 'How are you?' contains Word 'are' 
string 'How are you?' does not contain Word 'ar'
string 'How are you?' does not contain Word 'hare'

Nota: Qui non intendiamo Word per ogni sequenza di simboli.

Una definizione pratica di Word è nel senso il motore di espressione regolare PCRE, in cui le parole sono sottostringhe costituite solo da caratteri di Word, separate da caratteri non di Word.

Un carattere "Parola" è qualsiasi lettera o cifra o il carattere di sottolineatura, cioè qualsiasi carattere che può far parte di una "Parola" Perl. La definizione di lettere e cifre è controllata dalle tabelle dei caratteri di PCRE e può variare in caso di corrispondenza specifica della lingua (..)

8
mvw

Una stringa può essere verificata con la funzione seguente:

function either_String_existor_not($str, $character) {
    if (strpos($str, $character) !== false) {
        return true;
    }
    return false;
}
7
M Razwan

Un'altra soluzione per una stringa specifica:

$subject = 'How are you?';
$pattern = '/are/';
preg_match($pattern, $subject, $match);
if ($match[0] == 'are') {
    echo true;
}

Puoi anche usare la funzione strpos().

6
devpro

Uso:

$text = 'This is a test';
echo substr_count($text, 'is'); // 2

// So if you want to check if is exists in the text just put
// in a condition like this:
if (substr_count($text, 'is') > 0) {
    echo "is exists";
}
5
Kamaro Lambert

Un'opzione più semplice:

return ( ! empty($a) && strpos($a, 'are'))? true : false;
4
ShirleyCC

Penso che una buona idea sia usare mb_stpos:

$haystack = 'How are you?';
$needle = 'are';

if (mb_strpos($haystack, $needle) !== false) {

    echo 'true';
}

Poiché questa soluzione è minuscole e sicure per tutti i caratteri Unicode .


Ma puoi anche farlo in questo modo ( risposta sauch non ancora ):

if (count(explode($needle, $haystack)) > 1) {

    echo 'true';
}

Questa soluzione è anche minuscole e sicure per caratteri Unicode .

Inoltre tu non usare la negazione nell'espressione , che aumenta la leggibilità del codice .


Ecco un'altra soluzione usando la funzione :

function isContainsStr($haystack, $needle) {

    return count(explode($needle, $haystack)) > 1;
}

if (isContainsStr($haystack, $needle)) {

    echo 'true';
}
4
simhumileco

Uso:

$a = 'How are you?';
if (mb_strpos($a, 'are')) {
    echo 'true';
}

Esegue un'operazione di strpos () multi-byte sicura.

3
Mindexperiment

Puoi anche usare le funzioni built-in strchr() e strrchr() e le estensioni per stringhe multibyte mb_strchr() e mb_strrchr() . Queste funzioni restituiscono parti di stringhe e FALSE se non viene trovato nulla.

  • strchr() - Trova la prima occorrenza di una stringa (è un alias di strstr() ).
  • strrchr(): trova l'ultima occorrenza di un carattere in una stringa.
3
Aleksey Bykov