我正在使用php进行简单的数组搜索。
$qs = 'something$';
// check if string has bad characters...
$bad_chars = array('$',',',' ','?','=','&','-','|','@','#','%','^','*','(',')','{','}','|','\\','[',']','/','`','~');
if(in_array($qs,$bad_chars)) {
echo 'bad characters';
}
对我而言,这应该回应“坏人物”,但事实并非如此。
我错过了什么?
答案 0 :(得分:1)
$array = str_split($qs);
if(array_intersect($array, $bad_chars) != array())
{
echo 'bad characters';
}
答案 1 :(得分:1)
更新: benchmark,将4个答案与代码进行比较:
对test_bad_charachters函数进行100,000次迭代,无输出:
Jason's answer(for/str/in_array
):32秒
Mike Lewis' answer(foreach/str_split/in_array
):23秒
Gaurav's answer(array_intersect/!=
):8秒
my answer(str_replace/==
):4秒
更新结束
正如其他答案所指出的那样,in_array($qs, $bad_chars)
不会测试<{1}}中$qs
的字符,而整个字符串< / em> $bad_chars
(显然不是这样)。要获得预期的结果,您必须测试$qs
的单个字符。
这是一个应该执行此操作的解决方案 fast :
$qs
答案 2 :(得分:0)
这是因为它看到“$ $”是$ bad_chars中的一个元素,而不是。
修改强>
解决方案:
<?php
$qs = 'something$';
// check if string has bad characters...
$bad_chars = array('$',',',' ','?','=','&','-','|','@','#','%','^','*','(',')','{','}','|','\\','[',']','/','`','~');
foreach(str_split($qs) as $char){
if(in_array($char, $bad_chars)){
echo $char. " was bad char";
}
}
?>
答案 3 :(得分:0)
您正在搜索完整的"something$"'
,而不仅仅是错误"$"
- 这就是原因。
在http://php.net/in_array中查找文档。
答案 4 :(得分:0)
只需单独查看每个字母而不是整个单词。
$qs = 'something$';
$bad_chars = array('$',',',' ','?','=','&','-','|','@','#','%','^','*','(',')','{','}','|','\\','[',']','/','`','~');
for($i=0; $i < strlen($qs); $i++) {
// check if string has bad characters...
if(in_array($qs[$i],$bad_chars)) {
echo 'bad characters';
}
}