• array_filter与array_map


     php数组array_filter函数和array_slice函数:<?php /* array_filter()用回调函数过滤数组中的单元 array_filter(array,function) 参数描述:如果自定义过滤函数返回 true,则被操作的数组的当前就会被包含在返回的结果数组中, 并将结果组成一个新的数组,如果原数组是一个关联数组,键名保持不变。 */ function delEmpty($val) {

    <?php
    
    	$arr = [1,2,3,4,false,null,'',false,true];
    
    	$arrNew = array_filter($arr);
    	var_dump($arrNew);
    

     打印

    array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [8]=> bool(true) }

    说明所有未false和空的null的都被过滤掉了

     

    (PHP 4 >= 4.0.6, PHP 5, PHP 7)

    array_filter — 用回调函数过滤数组中的单元

     

    array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array

    依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

     

    array

    要循环的数组

    callback

    使用的回调函数

    如果没有提供 callback 函数, 将删除 array 中所有等值为 FALSE 的条目。更多信息见转换为布尔值

    flag

    决定callback接收的参数形式:

    • ARRAY_FILTER_USE_KEY - callback接受键名作为的唯一参数
    • ARRAY_FILTER_USE_BOTH - callback同时接受键名和键值

     

    返回过滤后的数组。

     

    版本说明
    5.6.0 添加可选的参数 flag,以及常量 ARRAY_FILTER_USE_KEY 和 ARRAY_FILTER_USE_BOTH

     

    Example #1 array_filter() 例子

    <?php
    function odd($var)
    {
        // returns whether the input integer is odd
        return($var & 1);
    }

    function even($var)
    {
        // returns whether the input integer is even
        return(!($var & 1));
    }

    $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
    $array2 = array(6, 7, 8, 9, 10, 11, 12);

    echo "Odd : ";
    print_r(array_filter($array1, "odd"));
    echo "Even: ";
    print_r(array_filter($array2, "even"));
    ?>

    以上例程会输出:

    Odd :
    Array
    (
        [a] => 1
        [c] => 3
        [e] => 5
    )
    Even:
    Array
    (
        [0] => 6
        [2] => 8
        [4] => 10
        [6] => 12
    )
    

    Example #2 不使用 callback 时的array_filter()

    <?php

    $entry = array(
                 0 => 'foo',
                 1 => false,
                 2 => -1,
                 3 => null,
                 4 => ''
              );

    print_r(array_filter($entry));
    ?>

    以上例程会输出:

    Array
    (
        [0] => foo
        [2] => -1
    )
    

    Example #3 带 flag 标记的 array_filter()

    <?php

    $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];

    var_dump(array_filter($arr, function($k) {
        return $k == 'b';
    }, ARRAY_FILTER_USE_KEY));

    var_dump(array_filter($arr, function($v, $k) {
        return $k == 'b' || $v == 4;
    }, ARRAY_FILTER_USE_BOTH));
    ?>

    以上例程会输出:

    array(1) {
      ["b"]=>
      int(2)
    }
    array(2) {
      ["b"]=>
      int(2)
      ["d"]=>
      int(4)
    }
    
     
    array_map ( callable $callback , array $array1 [, array $... ] ) : array

    array_map():返回数组,是为 array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。

     

    callback

    回调函数,应用到每个数组里的每个元素。

    array1

    数组,遍历运行 callback 函数。

    ...

    数组列表,每个都遍历运行 callback 函数。

     

    返回数组,包含 callback 函数处理之后 array1 的所有元素。

     

    Example #1 array_map() 例子

    <?php
    function cube($n)
    {
        return($n * $n * $n);
    }

    $a = array(1, 2, 3, 4, 5);
    $b = array_map("cube", $a);
    print_r($b);
    ?>

    这使得 $b 成为:

    Array
    (
        [0] => 1
        [1] => 8
        [2] => 27
        [3] => 64
        [4] => 125
    )
  • 相关阅读:
    SQL_Server_2005_数据类型转换函数(描述及实例)
    讨论:GUID与int自增列的问题
    SQL Server 2005无日志文件附加数据库
    优化SQL查询:如何写出高性能SQL语句
    开源项目之视频会议程序 Omnimeeting
    wzplayer player (android,windows,ios) 多核解码
    利用office2010 word2010生成目录
    利用office2010 word2010生成目录
    最近在忙活视频通话(sip)
    介绍几个在线画流程图的工具
  • 原文地址:https://www.cnblogs.com/brady-wang/p/10625359.html
Copyright © 2020-2023  润新知