手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2008年07月12日的文章

数组的加法乘法

在PHP的数组操作中,可能在处理数字方法会比较多一点,加法一向是被使用的,所以。。array_sum的使用就相对比较多了。(array_sum也只是仅仅支持一维数组,不过,无论是否有下标都可以直接处理),那么乘法、除法、减法怎么办呢?array_walker?杀鸡不用牛刀的。直接使用array_reduce就行了。

翻开手册,可以明显的看到array_reduce就是将回调函数迭代的作用在数组的每一个单元里,从而将数组简化成单一值。如果指定了第三个参数,那么,

1、如果要处理的数组为空,则返回第三个参数的值(第三个参数是INT型)

2、如果要处理的数组不为空,那么第三个参数则默认为数组的第一个值,相当用使用了array_unshift为原始数组头部插入一个值。

简单的例子如下:

PHP代码
  1. <?php  
  2.   
  3. function r_sum ( $a , $b){  
  4.     $a += $b;  
  5.     return $a;  
  6. }     
  7.   
  8. function r_mul ( $a , $b ){  
  9.     $a *= $b;  
  10.     return $a;  
  11. }  
  12.   
  13. $a = array(1,2,3,4,5);  
  14. $b = array();  
  15.   
  16. $c = array_reduce$a , 'r_sum');   //return 15  
  17. $d = array_reduce$a , 'r_mul' , 10  ) ; //return 1200 [10*1*2*3*4*5]  
  18. $e = array_reduce$b , 'r_sum' , 1 ); //return 1 因为$b是空数组  
  19.   
  20.   
  21. ?> 

 

现在,就不用再担心怎么处理加减乘除等四则运算了,不用再埋怨为什么只提供一个array_sum函数了吧。

PHP去除数组中的空值

说在惭愧,以前在去掉数组的空值是都是强写foreach或者while的,利用这两个语法结构来删除数组中的空元素,简单代码如下:

PHP代码
  1. <?php   
  2. foreach$arr as $k=>$v){   
  3.     if( !$v )   
  4.         unset( $arr[$k] );   
  5. }   
  6. ?>  

而且自我感觉还挺不错,只是这样的效率并不高也曾经试过,先将$arr转为对象,然后利用对象的特性来删除,因为:foreach是将当前操作的数组进行copy,每操作一下foreach,都是copy了一个变量,页面里面如果有太多的foreach,会是一个很大的消耗。

在网上闲逛的时候,看到人有提示用array_filter,觉得很吃惊。打开手册瞅了一下,发现自己一直就守着个宝山却不知道如何使用。

array_filter函数的功能是利用回调函数来对数组进行过滤,一直都以为用回调函数才能处理,却没有发现手册下面还有一句,如果没有回调函数,那么默认就是删除数组中值为false的项目。

例程:

PHP代码
  1. <?php   
  2.   
  3. $entry = array(   
  4.              0 => 'foo',   
  5.              1 => false,   
  6.              2 => -1,   
  7.              3 => null,   
  8.              4 => ''  
  9.           );   
  10.   
  11. print_r(array_filter($entry));   
  12. ?>   

输出值为:

XML/HTML代码
  1. Array   
  2. (   
  3.     [0] => foo   
  4.     [2] => -1   
  5. )  

看来,以后还是要多看手册啊……

就象array_slice一样也是个好东西。可惜以前从来没有注意过。

建议:PHP里面最重要的两章应该就是数组操作和字符串操作,这两章里面的函数都必须要熟练,其他的就等用的时候再查吧