竹磬网-邵珠庆の日记 生命只有一次,你可以用它来做些更多伟大的事情–Make the world a little better and easier


73月/160

PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)

发布在 邵珠庆

     通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便大笑),curl_setopt 是php的一个扩展库

     使用条件:需要在php.ini 中配置开启。(PHP 4 >= 4.0.2)
       //取消下面的注释
       extension=php_curl.dll

      在Linux下面,需要重新编译PHP了,编译时,你需要打开编译参数——在configure命令上加上“–with-curl” 参数。

1、 一个抓取网页的简单案例:

[php][/php] view plain copy
  1. // 创建一个新cURL资源  
  2. $ch = curl_init();  
  3.   
  4. // 设置URL和相应的选项  
  5. curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");  
  6. curl_setopt($ch, CURLOPT_HEADER, false);  
  7.   
  8. // 抓取URL并把它传递给浏览器  
  9. curl_exec($ch);  
  10.   
  11. //关闭cURL资源,并且释放系统资源  
  12. curl_close($ch);  

2、POST数据案例:

[php][/php] view plain copy
  1. // 创建一个新cURL资源  
  2. $ch = curl_init();  
  3. $data = 'phone='. urlencode($phone);  
  4. // 设置URL和相应的选项  
  5. curl_setopt($ch, CURLOPT_URL, "http://www.post.com/");  
  6. curl_setopt($ch, CURLOPT_POST, 1);  
  7. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
  8. // 抓取URL并把它传递给浏览器  
  9. curl_exec($ch);  
  10.   
  11. //关闭cURL资源,并且释放系统资源  
  12. curl_close($ch);  

3、关于SSL和Cookie

关于SSL也就是HTTPS协议,你只需要把CURLOPT_URL连接中的http://变成https://就可以了。当然,还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点。
关于Cookie,你需要了解下面三个参数:
CURLOPT_COOKIE,在当面的会话中设置一个cookie
CURLOPT_COOKIEJAR,当会话结束的时候保存一个Cookie
CURLOPT_COOKIEFILE,Cookie的文件。

PS:新浪微博登陆API部分截取(部分我增加了点注释,全当参数翻译下。哈哈) 有兴趣的自己研究,自己挪为己用。嘿嘿

[php][/php] view plain copy
  1. /** 
  2.      * Make an HTTP request 
  3.      * 
  4.      * @return string API results 
  5.      * @ignore 
  6.      */  
  7.     function http($url, $method, $postfields = NULL, $headers = array()) {  
  8.         $this->http_info = array();  
  9.         $ci = curl_init();  
  10.         /* Curl settings */  
  11.         curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);//让cURL自己判断使用哪个版本  
  12.         curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);//在HTTP请求中包含一个"User-Agent: "头的字符串。  
  13.         curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);//在发起连接前等待的时间,如果设置为0,则无限等待  
  14.         curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);//设置cURL允许执行的最长秒数  
  15.         curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);//返回原生的(Raw)输出  
  16.         curl_setopt($ci, CURLOPT_ENCODING, "");//HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。  
  17.         curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);//禁用后cURL将终止从服务端进行验证  
  18.         curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));//第一个是cURL的资源句柄,第二个是输出的header数据  
  19.         curl_setopt($ci, CURLOPT_HEADER, FALSE);//启用时会将头文件的信息作为数据流输出  
  20.   
  21.         switch ($method) {  
  22.             case 'POST':  
  23.                 curl_setopt($ci, CURLOPT_POST, TRUE);  
  24.                 if (!empty($postfields)) {  
  25.                     curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);  
  26.                     $this->postdata = $postfields;  
  27.                 }  
  28.                 break;  
  29.             case 'DELETE':  
  30.                 curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');  
  31.                 if (!empty($postfields)) {  
  32.                     $url = "{$url}?{$postfields}";  
  33.                 }  
  34.         }  
  35.   
  36.         if ( isset($this->access_token) && $this->access_token )  
  37.             $headers[] = "Authorization: OAuth2 ".$this->access_token;  
  38.   
  39.         $headers[] = "API-RemoteIP: " . $_SERVER['REMOTE_ADDR'];  
  40.         curl_setopt($ci, CURLOPT_URL, $url );  
  41.         curl_setopt($ci, CURLOPT_HTTPHEADER, $headers );  
  42.         curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE );  
  43.   
  44.         $response = curl_exec($ci);  
  45.         $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);  
  46.         $this->http_info = array_merge($this->http_info, curl_getinfo($ci));  
  47.         $this->url = $url;  
  48.   
  49.         if ($this->debug) {  
  50.             echo "=====post data======\r\n";  
  51.             var_dump($postfields);  
  52.   
  53.             echo '=====info====='."\r\n";  
  54.             print_r( curl_getinfo($ci) );  
  55.   
  56.             echo '=====$response====='."\r\n";  
  57.             print_r( $response );  
  58.         }  
  59.         curl_close ($ci);  
  60.         return $response;  
  61.     }  

更详细的参数说明参考:http://cn2.php.net/curl_setopt

 
 
1612月/130

Mysql函数GROUP_CONCAT

发布在 邵珠庆

GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,具体可参考MySQL官方文挡:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

语法:

GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC |DESC] [,col_name ...]] [SEPARATOR str_val])

1.例如:
SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHEREstudent_id=2 GROUP BY student_id; 
+------------+---------+ 
| student_id | courses | 
+------------+---------+ 
| 2          | 3,4,5 |
+------------+---------+ 
这 就不需要用php循环了
$row = $pdo->query("SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id");
$result = explode(',', $row['courses']); 

2.当然分隔符还可以自定义,默认是以“,”作为分隔符,若要改为“|||”,则使用SEPARATOR来指定,例如:

SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_coursesWHERE student_id=2 GROUP BY student_id;
+------------+---------+ 
| student_id | courses | 
+------------+---------+ 
| 2          | 3|||4|||5 |
+------------+---------+ 

3.除此之外,还可以对这个组的值来进行排序再连接成字符串,例如按courses_id降序来排:
SELECT student_id, GROUP_CONCAT(courses_id ORDER BY courses_id DESC) AS courses FROMstudent_courses WHERE student_id=2 GROUP BY student_id;
+------------+---------+ 
| student_id | courses | 
+------------+---------+ 
| 2 | 5,4,3 |
+------------+---------+ 

4.需要注意的:

a.int字段的连接陷阱

当你用group_concat的时候请注意,连接起来的字段如果是int型,一定要转换成char再拼起来,
否则在你执行后(ExecuteScalar或者其它任何执行SQL返回结果的方法)返回的将不是一个逗号隔开的串,
而是byte[]。

该问题当你在SQLyog等一些工具中是体现不出来的,所以很难发现。

select group_concat(ipaddress) from t_ip 返回逗号隔开的串
select group_concat(id) from t_ip 返回byte[]
select group_concat(CAST(id as char)) from t_dep 返回逗号隔开的串
select group_concat(Convert(id , char)) from t_dep 返回逗号隔开的串

附Cast,convert的用法:
CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)
CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

这个类型 可以是以下值其中的 一个:

BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

b.长度陷阱
用了group_concat后,select里如果使用了limit是不起作用的.
用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。

使用group_concat_max_len系统变量,你可以设置允许的最大长度。
程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。

在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,重新打开SQLyog,设置就会生效。

611月/121

Excel常用函数大全

发布在 邵珠庆

 

 

我们在使用Excel制作表格整理数据的时候,常常要用到它的函数功能来自动统计处理表格中的数据。这里整理了Excel中使用频率最高的函数的功能、使用方法,以及这些函数在实际应用中的实例剖析,并配有详细的介绍。

1、ABS函数   

函数名称:ABS   

主要功能:求出相应数字的绝对值。   

使用格式:ABS(number)   

参数说明:number代表需要求绝对值的数值或引用的单元格。   

应用举例:如果在B2单元格中输入公式:=ABS(A2),则在A2单元格中无论输入正数(如100)还是负数(如-100),B2中均显示出正数(如100)。   

特别提醒:如果number参数不是数值,而是一些字符(如A等),则B2中返回错误值#VALUE!。  

2、AND函数   

函数名称:AND   

主要功能:返回逻辑值:如果所有参数值均为逻辑真(TRUE),则返回逻辑真(TRUE),反之返回逻辑假(FALSE)。   

使用格式:AND(logical1,logical2, ...)   

参数说明:Logical1,Logical2,Logical3……:表示待测试的条件值或表达式,最多这30个。   

应用举例:在C5单元格输入公式:=AND(A5>=60,B5>=60),确认。如果C5中返回TRUE,说明A5和B5中的数值均大于等于60,如果返回FALSE,说明A5和B5中的数值至少有一个小于60。   

特别提醒:如果指定的逻辑条件参数中包含非逻辑值时,则函数返回错误值#VALUE!#NAME。  

3、AVERAGE函数   

函数名称:AVERAGE   

主要功能:求出所有参数的算术平均值。   

使用格式:AVERAGE(number1,number2,……)   

参数说明:number1,number2,……:需要求平均值的数值或引用单元格(区域),参数不超过30个。   

应用举例:在B8单元格中输入公式:=AVERAGE(B7:D7,F7:H7,7,8),确认后,即可求出B7至D7区域、F7至H7区域中的数值和7、8的平均值。   

特别提醒:如果引用区域中包含0值单元格,则计算在内;如果引用区域中包含空白或字符单元格,则不计算在内。  

4、COLUMN 函数   

函数名称:COLUMN   

主要功能:显示所引用单元格的列标号值。   

使用格式:COLUMN(reference)   

参数说明:reference为引用的单元格。   

应用举例:在C11单元格中输入公式:=COLUMN(B11),确认后显示为2(即B列)。   

特别提醒:如果在B11单元格中输入公式:=COLUMN(),也显示出2;与之相对应的还有一个返回行标号值的函数——ROW(reference)。  

5、CONCATENATE函数   

函数名称:CONCATENATE   

主要功能:将多个字符文本或单元格中的数据连接在一起,显示在一个单元格中。   

使用格式:CONCATENATE(Text1,Text……)   

参数说明:Text1、Text2……为需要连接的字符文本或引用的单元格。   

应用举例:在C14单元格中输入公式:=CONCATENATE(A14,"@",B14,".com"),确认后,即可将A14单元格中字符、@、B14单元格中的字符和.com连接成一个整体,显示在C14单元格中。   

特别提醒:如果参数不是引用的单元格,且为文本格式的,请给参数加上英文状态下的双引号,如果将上述公式改为:=A14&"@"&B14&".com",也能达到相同的目的。  

6、COUNTIF函数   

函数名称:COUNTIF   

主要功能:统计某个单元格区域中符合指定条件的单元格数目。   

使用格式:COUNTIF(Range,Criteria)   

参数说明:Range代表要统计的单元格区域;Criteria表示指定的条件表达式。     

应用举例:在C17单元格中输入公式:=COUNTIF(B1:B13,">=80"),确认后,即可统计出B1至B13单元格区域中,数值大于等于80的单元格数目。   

特别提醒:允许引用的单元格区域中有空白单元格出现。  

7、DATE函数   

函数名称:DATE   

主要功能:给出指定数值的日期。   

使用格式:DATE(year,month,day)   

参数说明:year为指定的年份数值(小于9999);month为指定的月份数值(可以大于12);day为指定的天数。   

应用举例:在C20单元格中输入公式:=DATE(2003,13,35),确认后,显示出2004-2-4。   

特别提醒:由于上述公式中,月份为13,多了一个月,顺延至2004年1月;天数为35,比2004年1月的实际天数又多了4天,故又顺延至2004年2月4日。  

8、函数名称:DATEDIF  

主要功能:计算返回两个日期参数的差值。  

使用格式:=DATEDIF(date1,date2,"y")、=DATEDIF(date1,date2,"m")、=DATEDIF(date1,date2,"d")  

参数说明:date1代表前面一个日期,date2代表后面一个日期;y(m、d)要求返回两个日期相差的年(月、天)数。  

应用举例:在C23单元格中输入公式:=DATEDIF(A23,TODAY(),"y"),确认后返回系统当前日期[用TODAY()表示)与A23单元格中日期的差值,并返回相差的年数。  

特别提醒:这是Excel中的一个隐藏函数,在函数向导中是找不到的,可以直接输入使用,对于计算年龄、工龄等非常有效。  

9、DAY函数  

函数名称:DAY  

主要功能:求出指定日期或引用单元格中的日期的天数。  

使用格式:DAY(serial_number)  

参数说明:serial_number代表指定的日期或引用的单元格。  

应用举例:输入公式:=DAY("2003-12-18"),确认后,显示出18。  

特别提醒:如果是给定的日期,请包含在英文双引号中。  

10、DCOUNT函数  

函数名称:DCOUNT  

主要功能:返回数据库或列表的列中满足指定条件并且包含数字的单元格数目。  

使用格式:DCOUNT(database,field,criteria)  

参数说明:Database表示需要统计的单元格区域;Field表示函数所使用的数据列(在第一行必须要有标志项);Criteria包含条件的单元格区域。  

应用举例:如图1所示,在F4单元格中输入公式:=DCOUNT(A1:D11,"语文",F1:G2),确认后即可求出语文列中,成绩大于等于70,而小于80的数值单元格数目(相当于分数段人数)。

   

 

  

特别提醒:如果将上述公式修改为:=DCOUNT(A1:D11,,F1:G2),也可以达到相同目的。  

11、FREQUENCY函数  

函数名称:FREQUENCY  

主要功能:以一列垂直数组返回某个区域中数据的频率分布。  

使用格式:FREQUENCY(data_array,bins_array)  

参数说明:Data_array表示用来计算频率的一组数据或单元格区域;Bins_array表示为前面数组进行分隔一列数值。  

应用举例:如图2所示,同时选中B32至B36单元格区域,输入公式:=FREQUENCY(B2:B31,D2:D36),输入完成后按下Ctrl+Shift+Enter组合键进行确认,即可求出B2至B31区域中,按D2至D36区域进行分隔的各段数值的出现频率数目(相当于统计各分数段人数)。

   

  

特别提醒:上述输入的是一个数组公式,输入完成后,需要通过按Ctrl+Shift+Enter组合键进行确认,确认后公式两端出现一对大括号({}),此大括号不能直接输入。  

12、IF函数  

函数名称:IF

主要功能:根据对指定条件的逻辑判断的真假结果,返回相对应的内容。  

使用格式:=IF(Logical,Value_if_true,Value_if_false)  

参数说明:Logical代表逻辑判断表达式;Value_if_true表示当判断条件为逻辑真(TRUE)时的显示内容,如果忽略返回TRUE;Value_if_false表示当判断条件为逻辑假(FALSE)时的显示内容,如果忽略返回FALSE。  

应用举例:在C29单元格中输入公式:=IF(C26>=18,"符合要求","不符合要求"),确信以后,如果C26单元格中的数值大于或等于18,则C29单元格显示符合要求字样,反之显示不符合要求字样。  

特别提醒:本文中类似在C29单元格中输入公式中指定的单元格,读者在使用时,并不需要受其约束,此处只是配合本文所附的实例需要而给出的相应单元格,具体请大家参考所附的实例文件。  

13、INDEX函数  

函数名称:INDEX  

主要功能:返回列表或数组中的元素值,此元素由行序号和列序号的索引值进行确定。  

使用格式:INDEX(array,row_num,column_num)  

参数说明:Array代表单元格区域或数组常量;Row_num表示指定的行序号(如果省略row_num,则必须有 column_num);Column_num表示指定的列序号(如果省略column_num,则必须有 row_num)。  

应用举例:如图3所示,在F8单元格中输入公式:=INDEX(A1:D11,4,3),确认后则显示出A1至D11单元格区域中,第4行和第3列交叉处的单元格(即C4)中的内容。

   

特别提醒:此处的行序号参数(row_num)和列序号参数(column_num)是相对于所引用的单元格区域而言的,不是Excel工作表中的行或列序号。  

14、INT函数  

函数名称:INT  

主要功能:将数值向下取整为最接近的整数。  

使用格式:INT(number)  

参数说明:number表示需要取整的数值或包含数值的引用单元格。  

应用举例:输入公式:=INT(18.89),确认后显示出18。  

特别提醒:在取整时,不进行四舍五入;如果输入的公式为=INT(-18.89),则返回结果为-19。  

15、ISERROR函数  

函数名称:ISERROR  

主要功能:用于测试函数式返回的数值是否有错。如果有错,该函数返回TRUE,反之返回FALSE。  

使用格式:ISERROR(value)  

参数说明:Value表示需要测试的值或表达式。  

应用举例:输入公式:=ISERROR(A35/B35),确认以后,如果B35单元格为空或0,则A35/B35出现错误,此时前述函数返回TRUE结果,反之返回FALSE。  

特别提醒:此函数通常与IF函数配套使用,如果将上述公式修改为:=IF(ISERROR(A35/B35),"",A35/B35),如果B35为空或0,则相应的单元格显示为空,反之显示A35/B35的结果。  

16、LEFT函数  

函数名称:LEFT  

主要功能:从一个文本字符串的第一个字符开始,截取指定数目的字符。  

使用格式:LEFT(text,num_chars)  

参数说明:text代表要截字符的字符串;num_chars代表给定的截取数目。  

应用举例:假定A38单元格中保存了我喜欢天极网的字符串,我们在C38单元格中输入公式:=LEFT(A38,3),确认后即显示出我喜欢的字符。  

特别提醒:此函数名的英文意思为,即从左边截取,Excel很多函数都取其英文的意思。  

17、LEN函数  

  

函数名称:LEN  

主要功能:统计文本字符串中字符数目。  

使用格式:LEN(text)  

参数说明:text表示要统计的文本字符串。  

应用举例:假定A41单元格中保存了我今年28岁的字符串,我们在C40单元格中输入公式:=LEN(A40),确认后即显示出统计结果6。  

特别提醒:LEN要统计时,无论中全角字符,还是半角字符,每个字符均计为1;与之相对应的一个函数——LENB,在统计时半角字符计为1,全角字符计为2。  

18、MATCH函数  

函数名称:MATCH  

主要功能:返回在指定方式下与指定数值匹配的数组中元素的相应位置。  

使用格式:MATCH(lookup_value,lookup_array,match_type)  

参数说明:Lookup_value代表需要在数据表中查找的数值;  

                   Lookup_array表示可能包含所要查找的数值的连续单元格区域;  

                   Match_type表示查找方式的值(-1、0或1)。  

       如果match_type为-1,查找大于或等于 lookup_value的最小数值,Lookup_array 必须按降序排列;  

       如果match_type为1,查找小于或等于 lookup_value 的最大数值,Lookup_array 必须按升序排列;  

       如果match_type为0,查找等于lookup_value 的第一个数值,Lookup_array 可以按任何顺序排列;如果省略match_type,则默认为1。  

应用举例:如图4所示,在F2单元格中输入公式:=MATCH(E2,B1:B11,0),确认后则返回查找的结果9

   

  

特别提醒:Lookup_array只能为一列或一行。  

19、MAX函数  

函数名称:MAX  

主要功能:求出一组数中的最大值。  

使用格式:MAX(number1,number2……)  

参数说明:number1,number2……代表需要求最大值的数值或引用单元格(区域),参数不超过30个。  

应用举例:输入公式:=MAX(E44:J44,7,8,9,10),确认后即可显示出E44至J44单元和区域和数值7,8,9,10中的最大值。  

特别提醒:如果参数中有文本或逻辑值,则忽略。  

20、MID函数  

函数名称:MID  

主要功能:从一个文本字符串的指定位置开始,截取指定数目的字符。  

使用格式:MID(text,start_num,num_chars)  

参数说明:text代表一个文本字符串;start_num表示指定的起始位置;num_chars表示要截取的数目。  

应用举例:假定A47单元格中保存了我喜欢天极网的字符串,我们在C47单元格中输入公式:=MID(A47,4,3),确认后即显示出天极网的字符。  

特别提醒:公式中各参数间,要用英文状态下的逗号,隔开。  

21、MIN函数  

函数名称:MIN  

主要功能:求出一组数中的最小值。  

使用格式:MIN(number1,number2……)  

参数说明:number1,number2……代表需要求最小值的数值或引用单元格(区域),参数不超过30个。  

应用举例:输入公式:=MIN(E44:J44,7,8,9,10),确认后即可显示出E44至J44单元和区域和数值7,8,9,10中的最小值。  

特别提醒:如果参数中有文本或逻辑值,则忽略。  

22、MOD函数  

函数名称:MOD  

主要功能:求出两数相除的余数。  

使用格式:MOD(number,divisor)  

参数说明:number代表被除数;divisor代表除数。  

应用举例:输入公式:=MOD(13,4),确认后显示出结果1。  

特别提醒:如果divisor参数为零,则显示错误值#DIV/0!;MOD函数可以借用函数INT来表示:上述公式可以修改为:=13-4*INT(13/4)。  

23、MONTH函数  

函数名称:MONTH  

主要功能:求出指定日期或引用单元格中的日期的月份。  

使用格式:MONTH(serial_number)  

参数说明:serial_number代表指定的日期或引用的单元格。  

应用举例:输入公式:=MONTH("2003-12-18"),确认后,显示出11。  

特别提醒:如果是给定的日期,请包含在英文双引号中;如果将上述公式修改为:=YEAR("2003-12-18"),则返回年份对应的值2003。  

24、NOW函数  

函数名称:NOW  

主要功能:给出当前系统日期和时间。  

使用格式:NOW()  

参数说明:该函数不需要参数。  

应用举例:输入公式:=NOW(),确认后即刻显示出当前系统日期和时间。如果系统日期和时间发生了改变,只要按一下F9功能键,即可让其随之改变。  

特别提醒:显示出来的日期和时间格式,可以通过单元格格式进行重新设置。  

25、OR函数  

函数名称:OR  

主要功能:返回逻辑值,仅当所有参数值均为逻辑假(FALSE)时返回函数结果逻辑假(FALSE),否则都返回逻辑真(TRUE)

使用格式:OR(logical1,logical2, ...)  

参数说明:Logical1,Logical2,Logical3……:表示待测试的条件值或表达式,最多这30个。  

应用举例:在C62单元格输入公式:=OR(A62>=60,B62>=60),确认。如果C62中返回TRUE,说明A62和B62中的数值至少有一个大于或等于60,如果返回FALSE,说明A62和B62中的数值都小于60。  

特别提醒:如果指定的逻辑条件参数中包含非逻辑值时,则函数返回错误值#VALUE!#NAME。  

26、RANK函数  

函数名称:RANK  

主要功能:返回某一数值在一列数值中的相对于其他数值的排位。  

使用格式:RANK(Number,ref,order)  

参数说明:Number代表需要排序的数值;ref代表排序数值所处的单元格区域;order代表排序方式参数(如果为0或者忽略,则按降序排名,即数值越大,排名结果数值越小;如果为非0值,则按升序排名,即数值越大,排名结果数值越大;)。  

应用举例:如在C2单元格中输入公式:=RANK(B2,$B$2:$B$31,0),确认后即可得出丁1同学的语文成绩在全班成绩中的排名结果。  

特别提醒:在上述公式中,我们让Number参数采取了相对引用形式,而让ref参数采取了绝对引用形式(增加了一个$符号),这样设置后,选中C2单元格,将鼠标移至该单元格右下角,成细十字线状时(通常称之为填充柄),按住左键向下拖拉,即可将上述公式快速复制到C列下面的单元格中,完成其他同学语文成绩的排名统计。  

27、RIGHT函数  

函数名称:RIGHT  

主要功能:从一个文本字符串的最后一个字符开始,截取指定数目的字符。  

使用格式:RIGHT(text,num_chars)  

参数说明:text代表要截字符的字符串;num_chars代表给定的截取数目。  

应用举例:假定A65单元格中保存了我喜欢天极网的字符串,我们在C65单元格中输入公式:=RIGHT(A65,3),确认后即显示出天极网的字符。  

特别提醒:Num_chars参数必须大于或等于0,如果忽略,则默认其为1;如果num_chars参数大于文本长度,则函数返回整个文本。 

28、SUBTOTAL函数  

函数名称:SUBTOTAL  

主要功能:返回列表或数据库中的分类汇总。  

使用格式:SUBTOTAL(function_num, ref1, ref2, ...)  

参数说明:Function_num为1到11(包含隐藏值)或101到111(忽略隐藏值)之间的数字,用来指定使用什么函数在列表中进行分类汇总计算(如图6);ref1, ref2,……代表要进行分类汇总区域或引用,不超过29个。

   

应用举例:如图7所示,在B64和C64单元格中分别输入公式:=SUBTOTAL(3,C2:C63)和=SUBTOTAL103,C2:C63),并且将61行隐藏起来,确认后,前者显示为62(包括隐藏的行),后者显示为61,不包括隐藏的行。

    

特别提醒:如果采取自动筛选,无论function_num参数选用什么类型,SUBTOTAL函数忽略任何不包括在筛选结果中的行;SUBTOTAL函数适用于数据列或垂直区域,不适用于数据行或水平区域。  

29、SUM函数

函数名称:SUM  

主要功能:计算所有参数数值的和。  

使用格式:SUM(Number1,Number2……)  

参数说明:Number1、Number2……代表需要计算的值,可以是具体的数值、引用的单元格(区域)、逻辑值等。  

应用举例:如图7所示,在D64单元格中输入公式:=SUM(D2:D63),确认后即可求出语文的总分。

   

特别提醒:如果参数为数组或引用,只有其中的数字将被计算。数组或引用中的空白单元格、逻辑值、文本或错误值将被忽略;如果将上述公式修改为:=SUM(LARGE(D2:D63,{1,2,3,4,5})),则可以求出前5名成绩的和。   

30、SUMIF函数  

函数名称:SUMIF  

主要功能:计算符合指定条件的单元格区域内的数值和。  

使用格式:SUMIF(Range,Criteria,Sum_Range)  

参数说明:Range代表条件判断的单元格区域;Criteria为指定条件表达式;Sum_Range代表需要计算的数值所在的单元格区域。  

应用举例:如图7所示,在D64单元格中输入公式:=SUMIF(C2:C63,"男",D2:D63),确认后即可求出生的语文成绩和。  

特别提醒:如果把上述公式修改为:=SUMIF(C2:C63,"女",D2:D63),即可求出生的语文成绩和;其中由于是文本型的,需要放在英文状态下的双引号("男"、"女")中。  

31、TEXT函数  

函数名称:TEXT  

主要功能:根据指定的数值格式将相应的数字转换为文本形式。  

使用格式:TEXT(value,format_text)  

参数说明:value代表需要转换的数值或引用的单元格;format_text为指定文字形式的数字格式。  

应用举例:如果B68单元格中保存有数值1280.45,我们在C68单元格中输入公式:=TEXT(B68, "$0.00"),确认后显示为$1280.45

特别提醒:format_text参数可以根据单元格格式对话框数字标签中的类型进行确定。   

32、TODAY函数  

函数名称:TODAY  

主要功能:给出系统日期。  

使用格式:TODAY()  

参数说明:该函数不需要参数。  

应用举例:输入公式:=TODAY(),确认后即刻显示出系统日期和时间。如果系统日期和时间发生了改变,只要按一下F9功能键,即可让其随之改变。  

特别提醒:显示出来的日期格式,可以通过单元格格式进行重新设置(参见附件)。  

33、VALUE函数  

函数名称:VALUE  

主要功能:将一个代表数值的文本型字符串转换为数值型。  

使用格式:VALUE(text)  

参数说明:text代表需要转换文本型字符串数值。  

应用举例:如果B74单元格中是通过LEFT等函数截取的文本型字符串,我们在C74单元格中输入公式:=VALUE(B74),确认后,即可将其转换为数值型。  

特别提醒:如果文本型数值不经过上述转换,在用函数处理这些数值时,常常返回错误。   

34、VLOOKUP函数  

函数名称:VLOOKUP  

主要功能:在数据表的首列查找指定的数值,并由此返回数据表当前行中指定列处的数值。  

使用格式:VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)  

参数说明:Lookup_value代表需要查找的数值;Table_array代表需要在其中查找数据的单元格区域;Col_index_num为在table_array区域中待返回的匹配值的列序号(当Col_index_num为2时,返回table_array第2列中的数值,为3时,返回第3列的值……);Range_lookup为一逻辑值,如果为TRUE或省略,则返回近似匹配值,也就是说,如果找不到精确匹配值,则返回小于lookup_value的最大数值;如果为FALSE,则返回精确匹配值,如果找不到,则返回错误值#N/A。  

应用举例:参见图7,我们在D65单元格中输入公式:=VLOOKUP(B65,B2:D63,3,FALSE),确认后,只要在B65单元格中输入一个学生的姓名(如丁48),D65单元格中即刻显示出该学生的语言成绩。  

特别提醒:Lookup_value参见必须在Table_array区域的首列中;如果忽略Range_lookup参数,则Table_array的首列必须进行排序;在此函数的向导中,有关Range_lookup参数的用法是错误的。  

35、WEEKDAY函数  

函数名称:WEEKDAY  

主要功能:给出指定日期的对应的星期数。  

使用格式:WEEKDAY(serial_number,return_type)  

参数说明:serial_number代表指定的日期或引用含有日期的单元格;return_type代表星期的表示方式[当Sunday(星期日)为1、Saturday(星期六)为7时,该参数为1;当Monday(星期一)为1、Sunday(星期日)为7时,该参数为2(这种情况符合中国人的习惯);当Monday(星期一)为0、Sunday(星期日)为6时,该参数为3]。  

应用举例:输入公式:=WEEKDAY(TODAY(),2),确认后即给出系统日期的星期数。  

特别提醒:如果是指定的日期,请放在英文状态下的双引号中,如=WEEKDAY("2003-12-18",2)。

197月/120

活用COUNTIF函数轻松统计数据

发布在 邵珠庆

 

对于统计指定条件的单元格数量等需求,Excel提供了一个很好的函数,可以瞬间完成大批量的繁琐劳动。

具体函数的使用方法有:

1、返加包含值12的单元格数量

=COUNTIF(range,12)

2、返回包含负值的单元格数量

=COUNTIF(range,”<0″)

3、返回不等于0的单元格数量

=COUNTIF(range,”<>0″)

4、返回大于5的单元格数量

=COUNTIF(range,”>5″)

5、返回等于单元格A1中内容的单元格数量

=COUNTIF(range,A1)

6、返回大于单元格A1中内容的单元格数量

=COUNTIF(range,“>”&A1)

7、返回包含文本内容的单元格数量

=COUNTIF(range,“*”)

8、返回包含三个字符内容的单元格数量

=COUNITF(range,“???”)

9、返回包含单词”GOOD”(不分大小写)内容的单元格数量

=COUNTIF(range,“GOOD”)

10、返回在文本中任何位置包含单词”GOOD”字符内容的单元格数量

=COUNTIF(range,“*GOOD*”)

11、返回包含以单词”AB”(不分大小写)开头内容的单元格数量

=COUNTIF(range,“AB*”)

12、返回包含当前日期的单元格数量

=COUNTIF(range,TODAY())

13、返回大于平均值的单元格数量

=COUNTIF(range,”>”&AVERAGE(DATA))

14、返回平均值上面超过三个标准误差的值的单元格数量

=COUNTIF(range,“>”&AVERAGE(DATA)+STDEV(DATA)*3)

15、返回包含值为或-3的单元格数量

=COUNTIF(range,3)+COUNIF(DATA,-3)

16、返回包含值;逻辑值为TRUE的单元格数量

=COUNTIF(range,TRUE)

208月/100

js四舍五入(round()方法)并保留小数点后N位的函数

发布在 邵珠庆

写法巨强的四舍五入的转换函数,如下:

function round(v,e){

var t=1;

for(;e>0;t*=10,e--);

for(;e<0;t/=10,e++);

return Math.round(v*t)/t;

}

在感叹JS强大的同时,也感叹一下自己的无知!

参数里的:

v表示要转换的值

e表示要保留的位数

函数里的两个for,这个是重点了,

第一个for针对小数点右边的情况,也就是保留小数点右边多少位;

第二个for针对小数点左边的情况,也就是保留小数点左边多少位。

for的作用,就是计算t的值,也就是v应该放大或者缩小多少倍的倍数(倍数=t)。

for这里利用到了for里的两个特性,条件判断和计数器累计(循环),

当e满足条件时for继续,并且e每次累加(e的每次累加,就是给for制造不满足循环的条件)的同时,也计算t的值。

最后利用了原生的round方法来计算被放大/缩小后的v的结果,然后把结果放大/缩小到正确的倍数

184月/100

ThinkPHP单字母函数(快捷方法)使用总结

发布在 邵珠庆

1.U() URL组装 支持不同URL模式
U($url='',$vars='',$suffix=true,$domain=false)
  @param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...'
  @param string|array $vars 传入的参数,支持数组和字符串
  @param string $suffix 伪静态后缀,默认为true表示获取配置值
  @param boolean $domain 是否显示域名
  @return string

2.D() D函数用于实例化模型类 格式 [资源://][模块/]模型
D($name='',$layer='')
  @param string $name 资源地址
  @param string $layer 模型层名称
  @return Model

3.M() M函数用于实例化一个没有模型文件的Model
M($name='',$tablePrefix='',$connection='')
  @param string $name Model名称 支持指定基础模型 例如MongoModel:User
  @param string $tablePrefix 表前缀
  @param mixed $connection 数据库连接信息
  @return Model

4.I() 获取输入参数 支持过滤和默认值
I($name,$default='',$filter=null)
  使用方法:

I('id',0); //获取id参数 自动判断get或者post
I('post.name','','htmlspecialchars'); //获取$_POST['name']
I('get.'); //获取$_GET

5.B() 执行某个行为
B($name,$tag='',&$params=NULL)
  @param string $name 行为名称
  @param string $tag 标签名称(行为类无需传入)
  @param Mixed $params 传入的参数
  @return void

6.C() 读取及设置配置参数
C($name=null,$value=null,$default=null)
  @param string|array $name 配置变量
  @param mixed $value 配置值
  @param mixed $default 默认值
  @return mixed

7.E() 抛出异常处理
E($msg, $code=0)
  @param string $msg 异常消息
  @param integer $code 异常代码 默认为0
  @return void

8.G() 记录和统计时间(微秒)和内存使用情况
G($start,$end='',$dec=4)
  使用方法:
G('begin'); // 记录开始标记位
// ... 区间运行代码
G('end'); // 记录结束标签位
echo G('begin','end',6); //统计区间运行时间 精确到小数后6位
echo G('begin','end','m'); // 统计区间内存使用情况
  如果end标记位没有定义,则会自动以当前作为标记位
  其中统计内存使用需要 MEMORY_LIMIT_ON 常量为true才有效
  @param string $start 开始标签
  @param string $end 结束标签
  @param integer|string $dec 小数位或者m
  @return mixed

9.L()获取和设置语言定义(不区分大小写)
L($name=null,$value=null)
  @param string|array $name 语言变量
  @param mixed $value 语言值或者变量
  @return mixed

10.T()获取模版文件 格式 资源://模块@主题/控制器/操作
T($template='',$layer='')
  @param string $name 模版资源地址
  @param string $layer 视图层(目录)名称
  @return string

11.N() 设置和获取统计数据
N($key,$step=0,$save=false)
  使用方法:
N('db',1); // 记录数据库操作次数
N('read',1); // 记录读取次数
echo N('db'); // 获取当前页面数据库的所有操作次数
echo N('read'); // 获取当前页面读取次数
  @param string $key 标识位置
  @param integer $step 步进值
  @return mixed

12.A()A函数用于实例化控制器

格式:[资源://][模块/]控制器
A($name,$layer='',$level='')
  @param string $name 资源地址
  @param string $layer 控制层名称
  @param integer $level 控制器层次
  @return Controller|false

13.R() 远程调用控制器的操作方法
URL 参数格式 [资源://][模块/]控制器/操作
R($url,$vars=array(),$layer='')
  @param string $url 调用地址
  @param string|array $vars 调用参数 支持字符串和数组
  @param string $layer 要调用的控制层名称
  @return mixed

14.W()渲染输出Widget
W($name,$data=array())
  @param string $name Widget名称
  @param array $data 传入的参数
  @return void

15.S()缓存管理
S($name,$value='',$options=null)
  @param mixed $name 缓存名称,如果为数组表示进行缓存设置
  @param mixed $value 缓存值
  @param mixed $options 缓存参数
  @return mixed

16.F() 快速文件数据读取和保存 针对简单类型数据 字符串、数组
F($name, $value='',$path=DATA_PATH)
  @param string $name 缓存名称
  @param mixed $value 缓存值
  @param string $path 缓存路径
  @return mixed