为什么这个数组搜索不适合我?

时间:2011-03-18 04:55:57

标签: php

我正在使用php进行简单的数组搜索。

$qs = 'something$';

// check if string has bad characters...
$bad_chars = array('$',',',' ','?','=','&','-','|','@','#','%','^','*','(',')','{','}','|','\\','[',']','/','`','~');

if(in_array($qs,$bad_chars)) {
  echo 'bad characters';
}

对我而言,这应该回应“坏人物”,但事实并非如此。

我错过了什么?

5 个答案:

答案 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 answerfor/str/in_array):32秒
Mike Lewis' answerforeach/str_split/in_array):23秒
Gaurav's answerarray_intersect/!=):8秒
my answerstr_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';
 }
}