如何自动完成变量

时间:2018-10-22 12:39:05

标签: php variables autocomplete

一旦我没有输入显示其中一个的变量的所有字符

  

nl,net,com

但是,如果我在DOT之后键入字母“ n”,则希望它显示以“ n”开头的变量:

  

nl,net

该怎么做?

$a = array("nl", "net", "com");

$q = $_GET["q"];

$domain = explode(".", $q);

if (in_array($domain[1], $a)) {
    echo $q;
} else {
    echo implode(',',$a);
}

3 个答案:

答案 0 :(得分:2)

此检查使用strstr() http://php.net/manual/en/function.strstr.php

作为示例输入,我输入了asdf.net的一部分,即asdf.n,因此.nl.net应该匹配:

  

更新:现在可以处理没有输入扩展名的代码,现在使用$q = 'asdf.';测试了代码,但末尾没有n。

<?php

$a = ['nl','net','com'];
$q = 'asdf.';

$domain = explode(".", $q);
$ext = $domain[1] ?: '';

if (empty($ext)) {
    echo implode(',',$a);
} else if (in_array($ext, $a)) {
    echo $q;
} else {
    $r = [];
    foreach ($a as $x) {
        if (strstr($x, $ext)) {
            $r[] = $x;
        }
    }
    echo (count($r)) ? implode(',',$r) : implode(',',$a);
}

https://3v4l.org/Or3fk

与其他答案相比,它的优点是它将检查所需的字符数,而在另一个答案中,它仅检查第一个字母。

答案 1 :(得分:0)

遍历数组,并将字符串的第一个字符与第一个爆炸值进行比较。

$a = array("nl", "net", "com");
$domain = explode(".", '.n');
foreach($a as $c) {
    if($c[0] == $domain[1]) {
    //if(substr($c, 0, strlen($domain[1])) == $domain[1]) { or this $domain can be multiple characters
        $matches[]= $c;
    }
}
if(!empty($matches)) {
    echo implode(',', $matches);
} else {
    echo 'no matches';
}

https://3v4l.org/sIkjg

答案 2 :(得分:0)

in_array将仅当针的整个值存在于数组中时才返回true。如果您的值不能包含逗号,则可以使用

$a = array("nl", "net", "com");

$q = $_GET["q"];

$imploded = implode(",", $a);

$domain = explode(".", $q);

if (strpos($imploded, $a) !== false) {
    echo $q;
} else {
    echo $imploded;
}

否则,如果我们不能假设这样的事情,则可以执行以下操作:

$a = array("nl", "net", "com");

$q = $_GET["q"];

$domain = explode(".", $q);

$found = false;

for ($index = 0; $index < count($a), $index++) {
    if (strpos($a[$index], $domain[1]) !== false) {
        $found = true;
    }
}

if ($found) {
    echo $q;
} else {
    echo implode(',',$a);
}