您的位置:首页 > 编程语言 > PHP开发

【小白笔记】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()

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,如果有不对的地方,欢迎大家指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php web后台 数组函数