Blogger Information
Blog 34
fans 0
comment 0
visits 33622
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php之数组回调函数练习
Serendipity-Ling
Original
989 people have browsed it
<?php
/**
 * 1.array_filter($arr,function($value){}):将每个值传入回调,最终结果仅包括返回true的元素,返回数组
 * ARRAY_FILTER_USE_KEY - callback接受键名作为的唯一参数
 *ARRAY_FILTER_USE_BOTH - callback同时接受键名和键值
 * 注意:如果不加callback,array_filter会默认过滤掉值为false的键值对(键名也不能为空)
 */
header('content-type:text/html;charset=utf-8');
//array_filter()可以过滤出数组中的$value,你可以对你过滤出来的$value进行删除,更新操作
//创建一个新数组,以这个数组做演示
$Array1 = ['id'=>20,'name'=>'黄蓉','course'=>'php','grade'=>99,'level'=>'优等',''=>''];
print_r($Array1);
echo '<br>这是初始的数组<hr>';
/*
 * 演示计划:
 * 将黄蓉改为郭靖,分数改为66
 * 删除level
 * 去除空元素
 */
$arrayToFilter = array_filter($Array1,function (&$value){
  if ($value == '黄蓉')
  {
      $value = '郭靖';
      return true;
  }else if ($value == 99)
  {
      $value = 66;
      return true;
  }else if ($value == '优等')
  {
      return false; //返回false,这个值就不会出现在结果中
  }else if ($value == '')
  {
      return false;
  }else
  {
      return true;//其他值就直接返回true,原样输出
  }
},ARRAY_FILTER_USE_BOTH);//默认输出键值和键名
print_r($arrayToFilter);
echo '<br>这是经过array_filter处理的数组<hr>';

//注意:如果不加callback,array_filter会默认过滤掉值为false的键值对(键名也不能为空)
$entry = array(
    0 => 'foo',
    1 => false,
    2 => -1,
    3 => null,
    4 => '',
);
echo '<br>';
print_r(array_filter($entry));
echo '<br>';
//结合位运算知识,来分出奇偶数
function odd($var) {
    //作用,按位与,如果二进制最后一位是1肯定是奇数
    return ($var & 1);
};
function even($var){
    return (! ($var & 1));
}
$num = [1,2,3,4,5,6,7,8,9];
$num2 = [1,2,3,4,5,6,7,8,9];
echo '<br>';
echo "odd函数回调:\n";
print_r(array_filter($num,"odd")) ;
echo '<br>';
echo "even函数回调:\n";
print_r(array_filter($num2,"even")) ;


/*
 * 2.array_walk($arr, function($value,$key[,$p]){},$p):将每个键值传入回调,返回布尔值
 * 优点:array_walk() 不会受到 array 内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置。
 * 演示计划:
 * 遍历出$Array1里的键值对,并过滤掉空元素,键名后加**
 */
echo '<table align="center" border="1" cellspacing="0" >';
$arrayToWalk = array_walk($Array1,function ($value,$key,$suffix){
    if ($key!= '')
    {
        echo '<tr>';
        echo '<th>'.$key.$suffix.'</th>';
        echo '</tr>';
        echo '<tr align="center">';
        echo '<td>'.$value.'</td>';
        echo '</tr>';
    }
},'**');
echo '</table>';
echo '这是将$Array放进array_walk遍历出来的数组';
/*
 * 从这里是不是看出什么不对了,记得$Array在前面已经用array_filter处理过了,删除了level和空元素
 * 更改了name和grade,之后我再把$Array放进array_walk遍历出来时,发现前面删除的元素也出来了,这里我可以理解为
 * array_filter也许是把处理的结果传到新的结果集$arrayToFilter中,$Array本身没有变化。但是接下来我遍历出的元素
 * 却发现$Array的键名name和grade的值是输出了经过array_filter处理过的值,这是为什么?
 * 推测:在array_filter处理时,对name和grade赋了值,也就是传递的值已经变化了,而删除level和空元素并不是赋值操作,只是不
 * 返回出来而已,在$Array中是真实存在的
 */

/*
 * 3. array_map(function(),$arr1[,arr2...]):对1个或多个数组回调处理,返回索引数组记录执行结果
 *
 */
//判断奇偶性
$num3 = [1,2,3,4,5,6,7,8,9];
$numToOdd = array_map(function ($var){
    if ($var & 1)
    {
        return '奇数';
    }else
    {
        return false;
    }
},$num3);
echo '<hr>';
echo '<pre>';
print_r($numToOdd);
//计算出奇数的个数
//先把空值去掉
$numToOdd2 = array_filter($numToOdd);
//如果你有强迫症的话,可以使用array_values()重新排列序列号
//第一种方法:计算数组的长度
$oddNumber = count($numToOdd2);
echo $oddNumber;
//第二种方法计算数组的长度
echo sizeof($numToOdd2);


//array_map(null,$arr1,$arr2...),可以生成多维数组
$array1 = ['id','name','course','grade'];
$array2 = [1,'杨过','php',88];
$student = array_map(null,$array1,$array2);
echo '<hr>';
echo '<pre>';
print_r($student);
//接下来采用list()来处理
echo '<table align="center" border="1" cellspacing="0" >';
foreach ($student as $value)
{
    list($key,$val)=$value;

    echo '<tr>';
    echo '<th>'.$key.'</th>';
    echo '</tr>';
    echo '<tr align="center">';
    echo '<td>'.$val.'</td>';
    echo '</tr>';
};
echo '</table>';


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post