web-dev-qa-db-fra.com

Comment rechercher du texte en utilisant php if ($ text contient "Monde")

Comment rechercher du texte en utilisant php?

Quelque chose comme: 

<?php

$text = "Hello World!";

if ($text contains "World") {
    echo "True";
}

?>

Sauf en remplaçant if ($text contains "World") { par une condition de travail.

19
faressoft

Dans votre cas, vous pouvez simplement utiliser strpos() , ou stripos() pour la recherche sensible à la casse:

if (stripos($text, "world") !== false) {
    echo "True";
}
39
BoltClock

Ce dont vous avez besoin est strstr() (ou stristr(), comme l'a souligné LucaB). Utilisez-le comme ceci:

if(strstr($text, "world")) {/* do stuff */}
8
Gabi Purcaru

Si vous recherchez un algorithme pour classer les résultats de recherche en fonction de la pertinence de plusieurs mots, voici un moyen rapide et facile de générer des résultats de recherche avec PHP uniquement.

Implémentation du modèle d'espace vectoriel dans PHP

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);
        $doc_count=count($corpus['doc_count']);

        foreach($words as $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 fro  high to low
        arsort($similar_documents);
    }   
    return $similar_documents;
}

DANS TON CAS

$query = 'world';

$corpus = array(
    1 => 'hello world',
);

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

R&EACUTE;SULTATS

Array
(
    [1] => 0.79248125036058
)

APPARIEMENT DE MOTS MULTIPLES AVEC DES PHRASES MULTIPLES

$query = 'hello world';

$corpus = array(
    1 => 'hello world how are you today?',
    2 => 'how do you do world',
    3 => 'hello, 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>';

R&EACUTE;SULTATS

Array
(
    [1] => 0.74864218272161
    [2] => 0.43398500028846
)

from Comment vérifier si une chaîne contient un mot spécifique en PHP?

3
RafaSashi

C'est peut-être ce que vous recherchez:

<?php

$text = 'This is a Simple text.';

// this echoes "is is a Simple text." because 'i' is matched first
echo strpbrk($text, 'mi');

// this echoes "Simple text." because chars are case sensitive
echo strpbrk($text, 'S');
?>

Est ce

Ou peut-être ceci:

<?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";
}
?>

Ou même cela 

<?php
$email  = '[email protected]';
$domain = strstr($email, '@');
echo $domain; // prints @example.com

$user = strstr($email, '@', true); // As of PHP 5.3.0
echo $user; // prints name
?>

Vous pouvez tout savoir à leur sujet dans la documentation ici:

http://php.net/manual/en/book.strings.php

2
Trufa

À mon avis, strstr () est meilleur que strpos (). parce que strstr () est compatible avec PHP 4 ET PHP 5. mais strpos () est uniquement compatible avec PHP 5. veuillez noter qu'une partie des serveurs ne possède pas de PHP 5

1
Mahdi Jazini
  /* https://ideone.com/saBPIe */

  function search($search, $string) {

    $pos = strpos($string, $search);  

    if ($pos === false) {

      return "not found";     

    } else {

      return "found in " . $pos;

    }    

  }

  echo search("world", "hello world");

Incorporer PHP en ligne:

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/saBPIe" ></iframe>

0
antelove