【小白笔记】PHP学习之路 (18) --数组遍历、统计、计算
2014-03-28 16:07
876 查看
array_map() 第一个参数为回调函数,第二个为数组。将数组中的每个元素用回调函数处理。可以传递多个数组。处理过的元素返回生成新数组。
array_walk() 第二个参数为回调函数,可传递多个自定义参数。对数组中的每个成员应用回调函数,成功返回真失败返回假。回调函数传参是键值-键名的形式。
array_walk_recursive() 功能与array_walk()相同,只不过 通过递归的方式对数组进行遍历,因此可以操作二维数组。
compact() 将多个变量转化为数组。可直接接受变量名字符串,也可接受包含变量名字符串的数组。
extract() 将数组生成变量。返回生成的变量数。默认若生成的变量已存在,则进行覆盖。可增加参数改变。
in_array() 判断元素是否在数组中。返回bool值。默认不检测类型,可增加第三个参数TRUE使其检测类型。
array_merge() 把一个或多个数组合并为一个数组。重名则前面的被覆盖。
array_merge_recursive() 作用同上,在有重复项时,合并生成二维数组。
array_change_key_case() 更改键名的大小写并返回,原数组不变。参数:CASE_UPPER、CASE_LOWER
range() 生成包含指定范围的数组,可以指定步长。与python中的range()一样。
array_count_values() 统计数组中所有值出现的次数。统计结果以数组形式返回。
array_pad() 用值将数组填补到指定长度。类似于str_pad()。第二个参数可以是负数,表示从开头填充。
array_product() 将数组中的键值相乘,返回数值(int或float)。当然使用循环也可以。
示例:
array_walk()
结果:
array_walk_recursive()
结果:
由于是二维数组,此时如果任然使用array_walk()的话,操作就会失败。
compact()
结果:
extract() EXTR_SKIP EXTR_OVERWRITE EXTR_IF_EXISTS
EXTR_PREFIX_IF_EXISTS EXTR_PREFIX_ALL
EXTR_PREFIX_SAME EXTR_REFS(引用变量地址)……
结果:
而如果前缀改为空字符串,仍然可以使用:
结果:
array_merge()
结果:
array_change_key_case()
结果:
array_count_values()
结果:
str_pad()和array_pad()
结果:
array_product()
结果:
以上均为个人理解,初学php,如果有不对的地方,欢迎大家指正!
array_walk() 第二个参数为回调函数,可传递多个自定义参数。对数组中的每个成员应用回调函数,成功返回真失败返回假。回调函数传参是键值-键名的形式。
array_walk_recursive() 功能与array_walk()相同,只不过 通过递归的方式对数组进行遍历,因此可以操作二维数组。
compact() 将多个变量转化为数组。可直接接受变量名字符串,也可接受包含变量名字符串的数组。
extract() 将数组生成变量。返回生成的变量数。默认若生成的变量已存在,则进行覆盖。可增加参数改变。
in_array() 判断元素是否在数组中。返回bool值。默认不检测类型,可增加第三个参数TRUE使其检测类型。
array_merge() 把一个或多个数组合并为一个数组。重名则前面的被覆盖。
array_merge_recursive() 作用同上,在有重复项时,合并生成二维数组。
array_change_key_case() 更改键名的大小写并返回,原数组不变。参数:CASE_UPPER、CASE_LOWER
range() 生成包含指定范围的数组,可以指定步长。与python中的range()一样。
array_count_values() 统计数组中所有值出现的次数。统计结果以数组形式返回。
array_pad() 用值将数组填补到指定长度。类似于str_pad()。第二个参数可以是负数,表示从开头填充。
array_product() 将数组中的键值相乘,返回数值(int或float)。当然使用循环也可以。
示例:
array_walk()
include("dump.php"); $arr3 = array("张三"=>"2200","李四"=>"655","王五"=>"1233","赵六"=>"1754"); if(array_walk($arr3,func_walk,800)){ echo "加工资成功!<br/>"; dump($arr3); } function func_walk(&$v,$k,$c=''){ //注意这里为传址,否则无法对局部变量进行修改 if($v<1000){ //传进来的是 键值-键名 的形式,与平常的不同 $v+=$c; } }
结果:
加工资成功! Array ( [张三] => 2200 [李四] => 1455 [王五] => 1233 [赵六] => 1754 )
array_walk_recursive()
$arr5 = array( array("uname"=>"张三","money"=>"100"), array("uname"=>"李四","money"=>"200"), array("uname"=>"王五","money"=>"300"), array("uname"=>"赵六","money"=>"400"), ); function func(&$v,$k){ if($k=='money' && $v<300){ $v+=1000; } } array_walk_recursive($arr5,'func'); dump($arr5);
结果:
Array ( [0] => Array ( [uname] => 张三 [money] => 1100 ) [1] => Array ( [uname] => 李四 [money] => 1200 ) [2] => Array ( [uname] => 王五 [money] => 300 ) [3] => Array ( [uname] => 赵六 [money] => 400 ) )
由于是二维数组,此时如果任然使用array_walk()的话,操作就会失败。
compact()
include('dump.php'); $name = "张三"; $age = "27"; $sex = "man"; $person = compact('name','age','sex'); $personArr = array('name','age','sex'); dump($person); dump(compact($personArr));
结果:
Array ( [name] => 张三 [age] => 27 [sex] => man ) Array ( [name] => 张三 [age] => 27 [sex] => man )
extract() EXTR_SKIP EXTR_OVERWRITE EXTR_IF_EXISTS
EXTR_PREFIX_IF_EXISTS EXTR_PREFIX_ALL
EXTR_PREFIX_SAME EXTR_REFS(引用变量地址)……
$gmail = array("weburl"=>"http://gmail.com.hk/","webname"=>"gmail","Inbox"=>"51_unread","无键值A","无键值B"); var_dump(extract($gmail,EXTR_PREFIX_ALL,'prefix')); echo $prefix_weburl."<br/>".$prefix_webname."<br/>".$prefix_Inbox."<br/>"; echo $prefix_0."<br/>".$prefix_1."<br/>";
结果:
int 5 http://gmail.com.hk/ gmail 51_unread 无键值A 无键值B
而如果前缀改为空字符串,仍然可以使用:
var_dump(extract($gmail,EXTR_PREFIX_ALL,'')); echo $_0;
结果:
int 5 无键值A
array_merge()
include("dump.php"); $gmail = array("weburl_gmail"=>"http://gmail.com.hk/","webname"=>"gmail","Inbox"=>"51_unread"); $qqmail = array("weburl_qqmail"=>"http://mail.qq.com/","webname"=>"qqmail","Inbox"=>"3_unread"); dump(array_merge($gmail,$qqmail))
结果:
Array ( [weburl_gmail] => http://gmail.com.hk/ [webname] => qqmail [Inbox] => 3_unread [weburl_qqmail] => http://mail.qq.com/ )
array_change_key_case()
$qqmail = array("weburl_qqmail"=>"http://mail.qq.com/","webname"=>"qqmail","Inbox"=>"3_unread"); dump(array_merge($gmail,$qqmail)); $upper = array_change_key_case($qqmail,CASE_UPPER); dump($upper); dump(array_change_key_case($upper,CASE_LOWER));
结果:
Array ( [weburl_gmail] => http://gmail.com.hk/ [webname] => qqmail [Inbox] => 3_unread [weburl_qqmail] => http://mail.qq.com/ )
Array
(
[WEBURL_QQMAIL] => http://mail.qq.com/ [WEBNAME] => qqmail
[INBOX] => 3_unread
)
Array
(
[weburl_qqmail] => http://mail.qq.com/ [webname] => qqmail
[inbox] => 3_unread
)
array_count_values()
include("dump.php"); $arr = array("a","b","c","a","b","b","d"); dump(array_count_values($arr));
结果:
Array ( [a] => 2 [b] => 3 [c] => 1 [d] => 1 )
str_pad()和array_pad()
$arr = array("x","y","z"); $str = "123"; echo str_pad($str,20,"M",STR_PAD_BOTH); dump(array_pad($arr,-7,"9"));
结果:
MMMMMMMM123MMMMMMMMM Array ( [0] => 9 [1] => 9 [2] => 9 [3] => 9 [4] => x [5] => y [6] => z )
array_product()
$arr1 = array(2,4,5,62,4,0.5); dump(array_product($arr1));
结果:
float 4960
以上均为个人理解,初学php,如果有不对的地方,欢迎大家指正!
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表
- php xml 入门学习资料
- PHP简单系统数据添加以及数据删除模块源文件下载