поисковый массив - php - PullRequest
       2

поисковый массив - php

2 голосов
/ 07 июля 2011

Я пытаюсь выяснить, как искать строку в поисках заданной переменной, и если она длиннее двух символов и существует в массиве, вернуть эту строку с каким-то образом подсвеченным поисковым словом. Я пытался в течение двух дней, и это не получилось, любая помощь будет очень кстати!

мой php:

$search = $_POST    ['search']; 
$text = 'some long text containg several words.';

$search = trim($search);
$search = strtolower($search);

$text = explode($text);

if ((in_array($search, $text)) && ($search >= 2)){
    echo $text;
}else{
    echo "no result or too short search word";
}

и мой HTML:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
    <p>word for which to search:</P>
    <form action="searchfunction.php" method="post">
            <input type="text" name="search" /><br />
            <input type="submit" />
        </form>

     </body>
     </html>

Ответы [ 5 ]

2 голосов
/ 07 июля 2011

Кажется, нет необходимости explode() в массиве вообще.Просто используйте strpos(), чтобы найти строку поиска и strlen(), чтобы убедиться, что она содержит более 2 символов.

$search = trim($_POST['search']); 
$text = 'some long text containg several words.';

// Search for $search inside $text as a string
// Both converted to lowercase only for the search    
if (strpos(strtolower($text), strtolower($search)) !== FALSE  && strlen($search) >= 2){
    echo $text;
}else{
    echo "no result or too short search word";
}

Теперь для обработки выделения.Самый простой способ сделать это - использовать str_ireplace(), чтобы окружить его <span>.Вам необходимо определить класс 'highlight' в вашем CSS-файле, чтобы он имел какой-то особый цвет.

// If your text was found...
$text = str_ireplace($search, "<span class='highlight'>$search</span>", $text);
echo $text;
0 голосов
/ 07 июля 2011

Возможно

$text = explode($text);

if ((in_array($search, $text)) && ($search >= 2)){

... должно быть ...

$text = explode(' ', $text);

if ((in_array($search, $text)) && (strlen($search) >= 2)){

Также возможно достичь своей цели без использования массивов, например, с помощью совпадения регулярного выражения:

$search = $_POST['search'];
if (strlen($search) < 2) {
    echo "too short search word";
} else {
    $text = 'some long text containg several words.';
    $pattern = '/\b' . preg_quote($search, '/') . '\b/i';
    if (preg_match($pattern, $text, $matches)) {
        echo $matches[0];
    } else {
        echo "no result";
    }
}
0 голосов
/ 07 июля 2011

explode () ожидает как минимум 2 параметра

$text = explode(' ', $text);
0 голосов
/ 07 июля 2011
Функция длины

, используемая в следующей строке

if ((in_array($search, $text)) && ($search >= 2)){

в строке выше, их необходимо модифицировать

if ((in_array($search, $text)) && (strlen($search) >= 2)){
0 голосов
/ 07 июля 2011

вместо

if ((in_array($search, $text)) && ($search >= 2)){

Можете ли вы попробовать

if ((in_array($search, $text)) && (strlen($search) >= 2)){

Кроме того, Взрывать нужно принять первый аргумент как "". Так что вы должны назвать это как

$text = explode(" ", $text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...