zoukankan      html  css  js  c++  java
  • 深入理解PHP数组函数和预定义接口

    一、 PHP对数组的过滤


    函数: array_filter(p1[,p2])

    参数p1是要过滤的数组,参数p2是自定义过滤会掉函数(可以是匿名函数)

    例子:

    1 <?php
    2 $arr = ['',null,0,1,2];
    3 $newArr = array_filter($arr);
    4 var_dump($newArr);
    5 //结果是: [1,2]
    6 //array_filter()在不填第二参数的情况下会去除数组中为false的元素

    总结: array_filter(p1[,p2])函数可以自定义过滤, 在不填写第二参数的情况下默认取出数组中为false的元素;


    二、 PHP取出数组中指定列


    函数: array_column( array $input , mixed $column_key [, mixed $index_key = null ])

    参数1是数组,参数2是要取出列的下标(作为新数组的值),参数三是要取出列的下标(作为新数组的键)

    例子:

     1 <?php
     2 $arr = [
     3         ['id' => 1, 'name' => 'lili', 'sex' => 1],
     4         ['id' => 2, 'name' => 'xiaoming', 'sex' => 0],
     5     ];
     6 $columnArr = array_column($arr, 'id');
     7 var_dump($columnArr);
     8 //结果: [1, 2]
     9 $columnArr1 = array_column($arr, 'id', 'name');
    10 var_dump($columnArr1);
    11 //结果: ['lili' => 1, 'xiaoming' => 2]
     


    三、PHP对数组的去重

    函数: array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

      参数1是数组,参数2是数组值的排序方式,多个值重复,此函数去保留第一个遇到的值的下标.

    例子:

    1 <?php
    2 $arr = [1,1,1,2,3,4];
    3 $arr1 = ['a' => 1, 'b' => 1, 'c' => 3];
    4 var_dump(array_unique($arr)); //array(4) { [0]=> int(1) [3]=> int(2) [4]=> int(3) [5]=> int(4) }
    5 var_dump(array_unique($arr1));//array(2) { ["a"]=> int(1) ["c"]=> int(3) }

     


    四、PHP取出两个数组中不同的元素


    函数: array array_diff ( array $array1 , array $array2 [, array $... ] )

    此函数可以有多个参数,此函数拿参数1和其他参数比较,取只在参数1中有的元素

    例子:

    1 <?php
    2 $arr  = [1, 2, 3];
    3 $arr1 = [4, 5, 1];
    4 $arr2 = [6, 7, 3];
    5 
    6 var_dump(array_diff($arr, $arr1, $arr2));   //array(1) { [1]=> int(2) }

    五、 PHP取出两个数组的交集


    函数: array array_intersect ( array $array1 , array $array2 [, array $... ] )

    此函数和array_diff正好相反, 取出多个数组中都存在的元素, 也可以说是交集.

    例子:

    1 <?php
    2 $arr  = [1, 2, 3];
    3 $arr1 = [3, 5, 1];
    4 $arr2 = [1, 7, 3];
    5 
    6 var_dump(array_intersect($arr, $arr1, $arr2));
    7 //array(2) { [0]=> int(1) [2]=> int(3) }

    六、 PHP对数组的遍历递归


    函数: array_walk_recursive()

     对数组中的每个成员递归地应用用户函数

     1 <?php
     2 $arr = [['id' => 1, 'name' => 'lii'], ['id' => 2, 'name' => 'haa']];
     3 
     4 $tmpArr1 = [];
     5 $tmpArr2 = [];
     6 array_walk_recursive($arr, function($v, $k)use(&$tmpArr1, &$tmpArr2){
     7     array_push($tmpArr1, $k);
     8     array_push($tmpArr2, $v);
     9 });
    10 var_dump($tmpArr1); 
    11 //array(4) { [0]=> string(2) "id" [1]=> string(4) "name" [2]=> string(2) "id" [3]=> string(4) "name" }
    12 echo '<hr />';
    13 var_dump($tmpArr2);
    14 //array(4) { [0]=> int(1) [1]=> string(3) "lii" [2]=> int(2) [3]=> string(3) "haa" }

    七、 PHP对数组的遍历迭代


    函数: array_reduce()

    对数组的元素进行遍历迭代

    例子:

    1 $arr = [['id' => 1, 'name' => 'lii'], ['id' => 2, 'name' => 'haa']];
    2 $result = array_reduce($arr, function($tmp, $v){
    3     array_push($tmp, $v);
    4 
    5     return $tmp;
    6 }, []);
    7 
    8 var_dump($result);
    9 //array(2) { [0]=> array(2) { ["id"]=> int(1) ["name"]=> string(3) "lii" } [1]=> array(2) { ["id"]=> int(2) ["name"]=> string(3) "haa" } }

    第一次遍历把['id' => 1, 'name' => 'lii'] 放进$tmp(空数组)中

    第二次遍历把['id' => 2, 'name' => 'haa'] 放进$tmp中

    结果: 

    array(2) { [0]=> array(2) { ["id"]=> int(1) ["name"]=> string(3) "lii" } [1]=> array(2) { ["id"]=> int(2) ["name"]=> string(3) "haa" } }


    八、 PHP预定义接口ReflectionClass


    映射类接口, 可以反射一个类的映射信息

    例子:

     1 class Person
     2 {
     3     public $id;
     4     public function __construct($id)
     5     {
     6         $this->id = $id;
     7     }
     8 }
     9 $reflection = new ReflectionClass('Person');
    10 $object = $reflection->newInstanceArgs(['id' => 1]);
    11 var_dump($object); //object(Person)#113 (1) { ["id"]=> int(1) }

    九、 PHP 预定义接口Closure


    1. bindTo   //给匿名函数绑定指定的$this对象和类作用域.

     

    2. bind      //给匿名函数绑定指定的$this对象和类作用域。,

    例子:

     1 class A {
     2     function __construct($val) {
     3         $this->val = $val;
     4     }
     5     public function getClosure()
     6     {
     7         //returns closure bound to this object and scope
     8         return function()
     9         {
    10             return $this->val;
    11         };
    12     }
    13 }
    14 
    15 $ob1 = new A(1);
    16 $ob2 = new A(2);
    17 
    18 $cl = $ob1->getClosure();  
    19 echo $cl(), "
    ";  //1
    20 $cl = $cl->bindTo($ob2);
    21 echo $cl(), "
    ";   //2
    22 var_dump($cl instanceof Closure);  //bool(true)
     1 class A {
     2     private static $sfoo = 1;
     3     private $ifoo = 2;
     4 }
     5 $cl1 = static function() {
     6     return A::$sfoo;
     7 };
     8 $cl2 = function() {
     9     return $this->ifoo;
    10 };
    11 
    12 $bcl1 = Closure::bind($cl1, null, 'A');
    13 $bcl2 = Closure::bind($cl2, new A(), 'A');
    14 echo $bcl1(), "
    ";  //1
    15 echo $bcl2(), "
    ";  //2
    
    
    
    
  • 相关阅读:
    ubuntu1804安装二进制版(tgz版编译版)mongdb4.2版的笔记
    ubuntu1804安装二进制版(编译版)nodejs12
    ubuntu1804安装pycharm2019.3.4版本及永久激活的方法
    ubuntu1804搜狗拼音输入法突然失效的解决办法
    2020ruby和ruby on rails想说再爱你不容易:安装rails失败解决办法
    ubuntu1804安装rubymine的IDE笔记
    ubuntu系统mysql5.7忘记/设置root的坑
    使用matplotlib时报which is a non-GUI backend的解决办法
    python文件操作笔记
    python字符串string的使用笔记
  • 原文地址:https://www.cnblogs.com/cleverstone/p/9199038.html
Copyright © 2011-2022 走看看