博客列表 >PHP 常用数组操作的回调函数

PHP 常用数组操作的回调函数

hanyufeng的博客
hanyufeng的博客原创
2018年01月10日 17:14:32920浏览

array_filter(),返回新的数组

<?php
header('content-type:text/html; charset=utf-8');
//定义数组
$array = [
    ['ISBN'=>'9787302466529', 'title'=>'ThinkPHP实战', 'pub'=>'清华大学出版社', 'price'=>49],
    ['ISBN'=>'9787121122910', 'title'=>'ThinkPHP从入门到精通', 'pub'=>'电子工业出版社', 'price'=>59],
    ['ISBN'=>'9787111569756', 'title'=>'ThinkPHP实例教程', 'pub'=>'机械工业出版社', 'price'=>58]
];
echo '<pre>';
echo '原数组:<br>';
print_r($array);//原样输出键、值(key、value)
//使用回调函数处理
echo '使用array_filter()的回调函数处理:<br>';
echo '1:按完整书名过滤<br>';
$result = array_filter($array, function (&$value) {//加&传递参数引用,可以修改,不加&仅传递参数值,修改无效
    if ($value['title'] == 'ThinkPHP实战') {
        return true;  //返回true,放回到结果中
    }
    return false; //返回false,这个值就不会出现在结果中
});
print_r($result);

echo '2:按书名中的某个字过滤<br>';
$result = array_filter($array, function ($value) {//加&传递参数引用,可以修改,不加&仅传递参数值,修改无效
    if ( strstr($value['title'] , '实') ) { //
        return $value;  //直接返回原参数,作用与return true是一样的
    }
    return false; //返回false,这个值就不会出现在结果中
});
print_r($result);

echo '3:按书价过滤<br>';
$result = array_filter($array, function ($value) {
    if ( $value['price']>50 ) {
        return $value;
    }
    return false;
});
print_r($result);

array_walk(),返回boolean 值,具体处理结果要在回调函数中赋值给其它数组

<?php
header('content-type:text/html; charset=utf-8');
//创建数组
$array = [50,60,63,65,70,75,79,80,85,86,89,90,96];
echo '<pre>';
echo '原数组:<br>';
print_r($array);//原样输出键、值(key、value)

//使用回调函数处理
echo '使用array_walk()的回调函数处理:<br>';

//输出处理后的数组

$grade_standard = ['及格'=>60, '中'=>70, '良'=>80, '优'=>90];
$grade_count = ['不及格'=>0, '及格'=>0, '中'=>0, '良'=>0, '优'=>0];
array_walk($array, function ($value,$key,$grade_standard){
    if($value >= $grade_standard['优'] ){
        $GLOBALS['grade_count']['优']++;
    } elseif($value >= $grade_standard['良'] ){
        $GLOBALS['grade_count']['良']++;
    } elseif($value >= $grade_standard['中'] ){
        $GLOBALS['grade_count']['中']++;
    } elseif($value >= $grade_standard['及格'] ){
        $GLOBALS['grade_count']['及格']++;
    } else {
        $GLOBALS['grade_count']['不及格']++;
    };
},$grade_standard);
echo '<pre>';
echo '成绩统计:<br>';
print_r($grade_count);

array_map(),单个数组相当于遍历,两个或多个数组相当于组合为一个新的多维数组,原数组的每个值,都是新数组的一级数组的元素数组(二级数组)的值。

<?php
header('content-type:text/html; charset=utf-8');
//创建数组
$grade_standard_score = [60, 70, 80, 90];
$grade_standard_grade = ['及格', '中', '良', '优'];

//使用回调函数处理
echo '使用array_map()的回调函数处理:<br>';
//合并数组
$grade_standard = array_map(null,$grade_standard_grade,$grade_standard_score);

//输出合并后的数组
echo '<pre>';
echo '成绩等级:<br>';
foreach(array_reverse($grade_standard) as $item)//从高到低输出
{
    list($key,$value) = $item;
    echo '高于'.$value.':'.$key.'<br>';
}



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议