PHP判断某个数组中是否存在指定的key

PHP利用array_key_exists()函数判断某个数组中是否存在指定的key,如果该key存在,则返回true,否则返回false。

$search = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search)) {
    $search['first']++;
}

值得注意的是,以上代码其实可以使用isset来实现:

$search = array('first' => 1, 'second' => 4);
if (isset($search['first'])) {
    $search['first']++;
}

使用isset的好处是isset的速度比array_key_exists()函数要快,因为isset不是函数,PHP能够像if else语句一样直接调用,而array_key_exists()的调用还需要查询PHP的函数库,搜索array_key_exists()函数比较耗时间。虽然如此,isset跟array_key_exists()函数比起来还是有缺陷的,例如:

$search = array('first' => null, 'second' => 4);

isset($search['first']); //返回false

array_key_exists('first', $search); //返回true

通过上面的例子可以看出$search[‘first’]如果等于null的时候,isset就无法发挥作用了。
因此,这两个函数的使用还得分场合,需要大家好好考虑。

PHP过滤非法字符(判断Kindereditor内容是否为空)

之前在网上找到一段PHP过滤非法字符的代码:

function safe_string($str)
{ //过滤安全字符
$str=str_replace("'","",$str);
$str=str_replace('"',"",$str);
$str=str_replace(" ","$nbsp;",$str);
$str=str_replace("\n;","
",$str);
$str=str_replace("<","<",$str);
$str=str_replace(">",">",$str);
$str=str_replace("\t"," ",$str);
$str=str_replace("\r","",$str);
$str=str_replace("/[\s\v]+/"," ",$str);
return $str;
}

后来在工作中,我使用Kindereditor的时候出现了一些问题,在编辑器中出现内容为空白的情况下,其实很多时候内容不一定为空,因为很可能还有隐藏的HTML标签存在,点击编辑器左上角的“HTML代码”就可以看到HTML标签了。那么怎么样判断是否出现这样的情况呢?

我的想法是先剥掉HTML的标签,然后去掉一空格、换行和制表符之后判断这个字符串是否为空即”。以下是判断的代码:

function safeString($str)
{ //过滤字符
 $str=strip_tags($str);    //剥掉HTML标签
 //去掉单双引号、空格、换行、制表符和 
 $str=str_replace("'","",$str);
 $str=str_replace('"',"",$str);
 $str=str_replace(" ","",$str);
 $str=str_replace("\n","",$str);
 $str=str_replace("\t"," ",$str);
 $str=str_replace("\r","",$str);
 $str=str_replace(" ","",$str);
 return $str;
}

使用以上函数过滤字符串之后,再判断字符串$str是否为空,即if($str==”),就完成这个判断了。

Linux Shell命令中判断目录下是否存在已知后缀名文件的命令

        今天遇到一个问题,需要判断目录下是否存在.c文件。我使用了if [ -f *.c ],用-f和通配符来判断是否有.c的文件存在,然而linux一直报错“unexpected operator”,因此在-f下,后面是不能使用通配符的。

        后来,我想了一个土办法,if [ -n “‘ls *.c'” ],这句话的意思是,如果ls命令执行后有得到内容,则是真,其中-n表示后面的内容不是空值时为真。这句话是可以用,可以判断文件存在在目录下,但是,这是出现了个问题,如果目录下没有.c的文件,就会报错“No such file or directory”,于是我放弃了这个方法。

        最后一个QQ群里一个牛人告诉我,使用 if ls *.c >/dev/null 2>&1;then,这是一个重定向的方法,ls所有以.c为后缀的文件,如果不存在,将标准错误重定向到标准输出,这里2>&1 的意思就是将标准错误也输出到标准输出当中。重定向中 0-标准输出,1-标准输出,2-标准错误,而No such file or directory是一个标准错误。

        值得注意的是:这个if后面没有中括号!并且2>&1的“>”是没有空格的!