2010-10-16 14 views
19

¿Cómo buscar texto usando php?

Algo así como:

<?php 

$text = "Hello World!"; 

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

?> 

Excepto la sustitución if ($text contains "World") { con una condición de trabajo.

+0

Usted puede encontrar [ 's ($ str) -> contiene ('Mundo')'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/ src/Str.php # L93) y ['s ($ str) -> containsIgnoreCase ('World')'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str .php # L105) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Str). – caw

Respuesta

37

En su caso, usted puede simplemente utilizar strpos() o stripos() para la búsqueda que ignore:

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

esto funciona incluso para tapas pequeñas y superiores. – AMB

+0

Perfectamente trabajando – Vivek

8

Lo que se necesita es strstr() (o stristr(), como señaló LucaB). Utilizar de esta manera:

if(strstr($text, "world")) {/* do stuff */} 
+4

strpos o stripos es mejor para el caso de uso dado por el OP - strstr toma todas las molestias de construir una nueva cadena, solo para ser desechado ... –

+1

Agregando al comentario de Paul, del manual de PHP para [ 'strstr()'] (http://www.php.net/manual/en/function.strstr.php): "Si solo quiere determinar si una aguja en particular se encuentra en el pajar, use la más rápida y con menos memoria. función 'strpos()' en su lugar. " – BoltClock

+0

Bueno, en realidad, es una microoptimización irrazonable utilizar strpos sobre Strstr dado el ejemplo original. La secuencia devuelta se desperdicia, pero basar la decisión en el "rendimiento" para una búsqueda de texto * single * no parece sensato. – mario

2

Esto podría ser lo que buscas:

<?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'); 
?> 

lo es?

O tal vez esto:

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

O incluso este

<?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 
?> 

Usted puede leer todo acerca de ellos en la documentación aquí:

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

1

en mi strstr dictamen () es mejor que strpos(). porque strstr() es compatible tanto con PHP 4 como con PHP 5. pero strpos() solo es compatible con PHP 5. Tenga en cuenta que parte de los servidores no tienen PHP 5

+1

Uhm - PHP5 se lanzó por primera vez en 2004. Si la compatibilidad con PHP4 es realmente un problema, le sugiero que cambie a una empresa de alojamiento diferente. – Edward

3

Si está buscando un algoritmo para clasificar los resultados de búsqueda según sobre la relevancia de las palabras múltiples, aquí viene una manera rápida y fácil de generar resultados de búsqueda solo con PHP.

Aplicación del modelo de espacio vectorial en 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; 
} 

En su caso

$query = 'world'; 

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

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

RESULTADOS

Array 
(
    [1] => 0.79248125036058 
) 

palabras coincidentes múltiple contra FRASES DE MÚLTIPLES

$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>'; 

RESULTADOS

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

de How do I check if a string contains a specific word in PHP?

0
/* 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"); 

Insertar línea de PHP:

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

+0

Reinventando mucho la rueda? – MJoraid