Как автоматически заполнить переменную - PullRequest
0 голосов
/ 22 октября 2018

Как только я не набрал все символы одной из переменных, он показывает это

nl, net, com

Но если я набрал вбуква "n" после DOT, я хочу, чтобы она показала переменные, которые начинаются с "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 голосов
/ 22 октября 2018

Это проверяется с использованием 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

Преимущество перед другим ответом здесь состоит в том, что он проверяет столько символов, сколько требуется, тогда как в другом ответе он проверяет только первую букву.

0 голосов
/ 22 октября 2018

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);
}
0 голосов
/ 22 октября 2018

Выполните итерацию по вашему массиву и сравните первый символ строки с первым разнесенным значением.

$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

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