一旦我没有输入显示其中一个的变量的所有字符
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);
}
答案 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);
}
与其他答案相比,它的优点是它将检查所需的字符数,而在另一个答案中,它仅检查第一个字母。
答案 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';
}
答案 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);
}