转载请注明出处:
http://blog.csdn.net/iwanghang/
觉得博文有用,请点赞,请评论,请关注,谢谢!~
转载请注明出处: http://blog.csdn.net/iwanghang/
觉得博文有用,请点赞,请评论,请关注,谢谢!~
本篇博文主要是 使用回调函数处理数组,2种方式:
函数调用,函数结构一目了然
匿名函数 ,即时使用,安全性高
下面演示几个函数的使用:主要是了解回调函数的使用:
count() 计算数组中的单元数目或对象中的属性个数
array_count_values() 统计数组中所有的值出现的次数
array_unique() 移除数组中重复的值
array_filter() 用回调函数过滤数组中的单元
array_walk() 使用用户自定义函数对数组中的每个元素做回调处理
array_map() 为数组的每个元素应用回调函数
通过array_filter()和array_walk()重点了解一下回调函数的使用,尤其是安全性较高的匿名函数
<?php
/**
* 数组的相关处理函数:
* http://php.net/manual/zh/ref.array.php
*
* 下面演示几个函数的使用:主要是了解回调函数的使用
* count() 计算数组中的单元数目或对象中的属性个数
* array_count_values() 统计数组中所有的值出现的次数
* array_unique() 移除数组中重复的值
* array_filter() 用回调函数过滤数组中的单元
* array_walk() 使用用户自定义函数对数组中的每个元素做回调处理
* array_map() 为数组的每个元素应用回调函数
* 通过array_filter()和array_walk()重点了解一下回调函数的使用,尤其是安全性较高的匿名函数
*/
$lamp = array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP");
echo '---------- print_r() ----------<br>';
print_r($lamp); // 打印结果:Array ( [os] => Linux [webserver] => Apache [db] => MySQL [language] => PHP )
echo '<br>';
/**
* count() 计算数组中的单元数目或对象中的属性个数
*/
echo '---------- count() 字符串 ----------<br>';
$str = "hello world";
$str2 = "";
var_dump(count($str)); // 打印结果:int(1)
echo '<br>';
var_dump(count($str2)); // 打印结果:int(1)
echo '<br>';
echo '---------- count() 数组 ----------<br>';
echo count($lamp); // 打印结果:4
echo '<br>';
echo '---------- count() 多维数组 ----------<br>';
$web = array(
"lamp"=>array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP"),
"lamp2"=>array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP"),
"lamp3"=>array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "language"=>"PHP")
);
echo count($web); // 打印结果:3
echo '<br>';
echo count($web,1); // 打印结果:15 , 数组有3个元素,子数组有12个元素
echo '<br>';
/**
* array_count_values() 统计数组中所有的值出现的次数
*/
echo '---------- array_count_values() ----------<br>';
$lamp4 = array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "db2"=>"MySQL", "language"=>"PHP");
echo print_r(array_count_values($lamp4)); // 打印结果:Array ( [Linux] => 1 [Apache] => 1 [MySQL] => 2 [PHP] => 1 ) 1
echo '<br>';
/**
* array_unique() 移除数组中重复的值
* 第一次出现的value保留其key,其他的移除
*/
echo '---------- array_unique() ----------<br>';
$lamp5 = array("os"=>"Linux", "webserver"=>"Apache", "db"=>"MySQL", "db2"=>"MySQL", "language"=>"PHP");
echo print_r(array_unique($lamp5)); // 打印结果:Array ( [os] => Linux [webserver] => Apache [db] => MySQL [language] => PHP ) 1
echo '<br>';
/**
* array_filter() 用回调函数过滤数组中的单元
*/
echo '---------- array_filter() ----------<br>';
$arr = array(1,2,false,-3,null,-2,3,4,"",5,-5,-4,-1);
echo '<pre>';
var_dump($arr);
/*打印结果:
array(13) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
bool(false)
[3]=>
int(-3)
[4]=>
NULL
[5]=>
int(-2)
[6]=>
int(3)
[7]=>
int(4)
[8]=>
string(0) ""
[9]=>
int(5)
[10]=>
int(-5)
[11]=>
int(-4)
[12]=>
int(-1)
}
*/
echo '---------- array_filter() 不传参调用----------<br>';
var_dump(array_filter($arr));
/*打印结果:结果中,false、null、"",被过滤掉了
array(10) {
[0]=>
int(1)
[1]=>
int(2)
[3]=>
int(-3)
[5]=>
int(-2)
[6]=>
int(3)
[7]=>
int(4)
[9]=>
int(5)
[10]=>
int(-5)
[11]=>
int(-4)
[12]=>
int(-1)
}
*/
echo '---------- array_filter() 通过自定义函数过滤 ----------<br>';
function myfun($value){ // 自己写的函数,大于等于0返回真,否则返回假
if ($value>=0){
return true;
}else{
return false;
}
}
var_dump(array_filter($arr,"myfun"));
/*打印结果:结果中,小于0的,被过滤掉了
array(8) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
bool(false)
[4]=>
NULL
[6]=>
int(3)
[7]=>
int(4)
[8]=>
string(0) ""
[9]=>
int(5)
}
*/
echo '---------- array_filter() 通过匿名函数过滤 ----------<br>';
echo '---------- 当其他地方不需要调用这个函数,推荐使用匿名函数,方便且安全 ----------<br>';
var_dump(array_filter($arr, function ($value){
return !($value%2==0);
}));
/*打印结果:结果中,2的倍数,被过滤掉了
array(6) {
[0]=>
int(1)
[3]=>
int(-3)
[6]=>
int(3)
[9]=>
int(5)
[10]=>
int(-5)
[12]=>
int(-1)
}
*/
/**
* array_walk() 使用用户自定义函数对数组中的每个元素做回调处理
*/
echo '---------- array_walk() ----------<br>';
$arr2 = array(1,2,3,4,5);
print_r($arr2);
echo '<br>';
/*打印结果:数组原型打印
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
*/
echo '---------- array_walk() 没有引用 $value 调用函数 ----------<br>';
function myfun2($value){ // 没有引用 $value
$value=$value*$value;
}
array_walk($arr2,"myfun2"); // 没有引用 $value
print_r($arr2);
echo '<br>';
/*打印结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
*/
echo '---------- array_walk() 有引用 &$value 调用函数 ----------<br>';
function myfun3(&$value){ // 引用 &$value
$value=$value*$value;
}
array_walk($arr2,"myfun3"); // 引用 &$value
print_r($arr2);
echo '<br>';
/*打印结果:
Array
(
[0] => 1
[1] => 4
[2] => 9
[3] => 16
[4] => 25
)
*/
echo '---------- array_walk() 同时处理key和value ----------<br>';
$arr3 = array("one"=>1, "two"=>2, "three"=>3, "four"=>4, "five"=>5);
print_r($arr3);
echo '<br>';
/*打印结果:数组原型打印
Array
(
[one] => 1
[two] => 2
[three] => 3
[four] => 4
[five] => 5
)
*/
echo '---------- array_walk() 调用函数有2个参数 即,同时对key和value操作 ----------<br>';
function myfun4(&$value,$key){
$value=$value*$value;
echo $key."~~~~~".$value."<br>";
}
array_walk($arr3,"myfun4");
/*打印结果:
one~~~~~1
two~~~~~4
three~~~~~9
four~~~~~16
five~~~~~25
*/
echo '---------- array_walk() 调用函数有2个参数 即,同时对key和value操作 匿名函数----------<br>';
array_walk($arr3,function ($value, $key){
echo $key."~~~~~".$value."<br>";
});
/*打印结果:
one~~~~~1
two~~~~~4
three~~~~~9
four~~~~~16
five~~~~~25
*/
/**
* array_map() 为数组的每个元素应用回调函数
*/
echo '---------- array_map() ----------<br>';
$arr4 = array(1,2,3,4,5);
$arr5 = array(6,7,8,9,0);
print_r($arr4);
echo '<br>';
/*打印结果:数组原型打印
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
*/
echo '---------- array_map() 1 ----------<br>';
function myfun5($value){
return $value*$value*$value;
}
$arr4new = array_map("myfun5", $arr4);
print_r($arr4new);
echo '<br>';
/*打印结果:
Array
(
[0] => 1
[1] => 8
[2] => 27
[3] => 64
[4] => 125
)
*/
echo '---------- array_map() 2 注意return ----------<br>';
function myfun6($value){
echo $value*$value*$value."<br>";
}
$arr4new = array_map("myfun6", $arr4);
print_r($arr4new);
echo '<br>';
/*打印结果:数组里的value没了,因为在函数里没有return,所以,使用array_map()注意return
1
8
27
64
125
Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
)
*/
echo '---------- array_map() 3 ----------<br>';
function myfun7($value, $value2){
echo "$value~~~~~$value2<br>";
return 1;
}
$arr45new = array_map("myfun7", $arr4,$arr5);
print_r($arr45new);
echo '<br>';
/*打印结果:
1~~~~~6
2~~~~~7
3~~~~~8
4~~~~~9
5~~~~~0
Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 1
[4] => 1
)
*/
echo '---------- array_map() 4 ----------<br>';
$arr45new = array_map(null, $arr4,$arr5);
print_r($arr45new);
echo '<br>';
/*打印结果:
Array
(
[0] => Array
(
[0] => 1
[1] => 6
)
[1] => Array
(
[0] => 2
[1] => 7
)
[2] => Array
(
[0] => 3
[1] => 8
)
[3] => Array
(
[0] => 4
[1] => 9
)
[4] => Array
(
[0] => 5
[1] => 0
)
)
*/
echo '---------- array_map() 5 ----------<br>';
$arr6 = array(1,2,3,4,5);
$arr7 = array("one","two","three");
$arr8 = array("aa","bb","cc","dd");
$arr678new = array_map(null,$arr6,$arr7,$arr8);
print_r($arr678new);
echo '<br>';
/*打印结果:
Array
(
[0] => Array
(
[0] => 1
[1] => one
[2] => aa
)
[1] => Array
(
[0] => 2
[1] => two
[2] => bb
)
[2] => Array
(
[0] => 3
[1] => three
[2] => cc
)
[3] => Array
(
[0] => 4
[1] =>
[2] => dd
)
[4] => Array
(
[0] => 5
[1] =>
[2] =>
)
)
*/
转载请注明出处: http://blog.csdn.net/iwanghang/
欢迎移动开发爱好者交流
沈阳或周边城市公司有意开发Android,请与我联系
联系方式
微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com
沈阳或周边城市公司有意开发Android,请与我联系
联系方式
微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com