Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-搜索,输入粗体字母_Php_Mysqli - Fatal编程技术网

PHP-搜索,输入粗体字母

PHP-搜索,输入粗体字母,php,mysqli,Php,Mysqli,我正在尝试做一个搜索引擎,我在一个文本框中写下,例如,Mi,它选择并显示Mike Ross。但是,它不适用于空间。我写迈克,我得到迈克·罗斯,但当我写迈克时,我得到迈克·罗斯,没有胆量 口音也是如此。 所以我写了Jo,结果是João Carlos。如果我写Joa,结果是João Carlos没有任何大胆的部分。我想在写作时忽略重音,但仍然在结果中显示它们 这是我在选择后的脚本: while($row = $result->fetch_array()) { $name =

我正在尝试做一个搜索引擎,我在一个文本框中写下,例如,Mi,它选择并显示Mike Ross。但是,它不适用于空间。我写迈克,我得到迈克·罗斯,但当我写迈克时,我得到迈克·罗斯,没有胆量

口音也是如此。 所以我写了Jo,结果是João Carlos。如果我写Joa,结果是João Carlos没有任何大胆的部分。我想在写作时忽略重音,但仍然在结果中显示它们

这是我在选择后的脚本:

 while($row = $result->fetch_array()) {
        $name = $row['name'];
        $array = explode(' ',trim($name));
        $array_length = count($array);

        for ($i=0; $i<$array_length; $i++ ) {
            $letters = substr($array[$i], 0, $q_length);

            if (strtoupper($letters) == strtoupper($q)) {
                $bold_name = '<strong>'.$letters.'</strong>';
                $final_name = preg_replace('~'.$letters.'~i', $bold_name, $array[$i], 1);
                $array[$i] = $final_name; 
        } 
         array[$i] = array[$i]." ";
        }
    foreach ($array as $t_name) { echo $t_name;
}
谢谢你的帮助

if (strtoupper($letters) == strtoupper($q))
对于空格,这将永远不会计算为true,因为您正在使用explode“”、trim$name从匹配的字母集中删除空格,从而有效地使任何带有与$letters不匹配的空格的$q值

这里有一个快速的例子,我认为你在寻找

<?php

$q = "Mike "; // User query
$name = "Mike Ross"; // Database row value

if(stripos($name, $q) !== false) // Case-insensitive match
{
    // Case-insensitive replace of match with match enclosed in strong tag
    $result = preg_replace("/($q)/i", '<strong>$1</strong>', $name);
    print_r($result);
}

// Result is 
// <strong>Mike </strong>Ross  

非常感谢。这就解决了空间问题。“有什么办法可以解决重音问题吗?”通过进一步阅读更新了答案-答案并不漂亮,但很多人都以某种形式想出了解决办法。@Penny用一个半工作的重音匹配器更新了答案。值得注意的是,我不确定如何将重音恢复到返回字符串上。
<?php

$q = "Joa";
$name = "João Carlos";

$searchable_name = replace_accents($name);

if(stripos($searchable_name, $q) !== false)
{
    $result = preg_replace("/($q)/i", '<strong>$1</strong>', $searchable_name);
    print_r($result);
}

function replace_accents($str) {
    $str = htmlentities($str, ENT_COMPAT, "UTF-8");
    $str = preg_replace('/&([a-zA-Z])(uml|acute|grave|circ|tilde);/','$1',$str);
    return html_entity_decode($str);
}