一、array_search的小陷阱
转载地址:http://blog.minimee.org/2012/09/07/array_search.html
在PHP的数组函数中我们可以看到这样一个函数:
mixed array_search ( mixed $needle , array $haystack [, bool $strict ] )
array_search可以让我们在一个数组中搜索是否含有某一个值,比如:
$array = array(0 => 'blue',1 => 'red'); // $key = 1 $key = array_search('red',$array);
这个函数给我们提供了非常好用的数组搜索功能,当在数组中找到指定值的时候会返回该值的键值。
但是我们必须小心的使用这个函数,因为它的返回值可能会给我们带来一些问题,我们在下面的代码:
$framework = 'laravel'; $frameworks = array(0 => 'laravel',1 => 'cakephp',2 => 'codeigniter'); if(array_search($framework,$frameworks)){ echo 'Got it'; } else{ echo 'Sorry.'; }
通常情况下我们习惯用if(true){//..}这样的判断方式。
上面的代码中我们想确认已有的框架数组是否包含laravel框架,从代码上看我们预期的结果是Got it,但实际上我们看到的是Sorry。
frameworks数组中包含有laravel这个值,但是我们却得到了意外的答案,这就是我们需要注意到地方。
在PHP5中array_search在没有找到指定值时会返回FALSE,找到的情况下会返回键值。我们可以看到上面的代码中laravel值的键值是0,因此我们查找laravel的返回是0。
这个0会给我们带来困扰,上面代码可以简化成这样:
if(0){ echo 'Got it.'; }else{ echo 'Sorry.'; }
程序不会知道这个0到底是false还是键值0,在上面的情况中它会被认为是false。我们需要更加准备的判断返回值:
$framework = 'laravel'; $frameworks = array(0 => 'laravel',1 => 'cakephp',2 => 'codeigniter'); if(false !== array_search($framework,$frameworks)){ echo 'Got it'; } else{ echo 'Sorry.'; }
-- EOF --
二、去除数组里的空值
由于没有去空值的数组函数,我们可以利用
array_diff — 计算数组的差集array array_diff ( array $array1, array $array2 [, array $ ...] )
array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
去空值的例子:
$array = array("a","b","",null,"c"); $array = array_diff($array, array(null,'null','',' '));
即可去除,注意在去除之后,很可能用到下面的重建数组索引的功能,参加第三条
三、重建数组索引
在unset()数组中的一项之后,会有个问题,就是数组索引不再连续,这时,我们可能就需要重建数组索引,
在这里我走了很多的弯路,总是找不到时解决方案,即便是想出来了,实现起来也很复杂,后来终于找到了方法,有个函数叫:array_values
array array_values ( array $input ) array_values() 返回 input 数组中所有的值并给其建立数字索引。下面是代码:
function rebuildArrayIndex($array){ $tempArray=array(); $tempArray=array_values($array); return $tempArray; }
四、MYSQL 插入、更新数据库前的注意事项
1、要对用户自已能输入的所有项进行转义,否则当用户输入",/等影响到数据库的字符时,会导致数据库更新不成功
转义的SQL语句是:mysql_real_escape_string()
五、如何在PHP页面执行随机加入的大段的PHP代码
有时我们想执行一大段的动态加进来的PHP代码,比如,我在数据库中有一个字段里根据不同条件获取不同的PHP代码段,但获取了之后怎么夹在当前页面执行就是个问题了,查了很多资料也无从下手,eval()看似可行,但它不能执行大段的PHP代码,这里我想到了include ‘’,我的解决办法是,先将该段代码写入到一个指定的PHP文件中,然后再将它include到当前页面,这样,当前页面就能执行这段代码了。