一、 PHP对数组的过滤


函数: array_filter(p1[,p2])

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

例子:

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

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


二、 PHP取出数组中指定列


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

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

例子:

 <?php
$arr = [
['id' => 1, 'name' => 'lili', 'sex' => 1],
['id' => 2, 'name' => 'xiaoming', 'sex' => 0],
];
$columnArr = array_column($arr, 'id');
var_dump($columnArr);
//结果: [1, 2]
$columnArr1 = array_column($arr, 'id', 'name');
var_dump($columnArr1);
//结果: ['lili' => 1, 'xiaoming' => 2]
 


三、PHP对数组的去重

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

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

例子:

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

 


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


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

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

例子:

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

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


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

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

例子:

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

六、 PHP对数组的遍历递归


函数: array_walk_recursive()

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

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

七、 PHP对数组的遍历迭代


函数: array_reduce()

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

例子:

 $arr = [['id' => 1, 'name' => 'lii'], ['id' => 2, 'name' => 'haa']];
$result = array_reduce($arr, function($tmp, $v){
array_push($tmp, $v); return $tmp;
}, []); var_dump($result);
//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


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

例子:

 class Person
{
public $id;
public function __construct($id)
{
$this->id = $id;
}
}
$reflection = new ReflectionClass('Person');
$object = $reflection->newInstanceArgs(['id' => 1]);
var_dump($object); //object(Person)#113 (1) { ["id"]=> int(1) }

九、 PHP 预定义接口Closure


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

 

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

例子:

 class A {
function __construct($val) {
$this->val = $val;
}
public function getClosure()
{
//returns closure bound to this object and scope
return function()
{
return $this->val;
};
}
} $ob1 = new A(1);
$ob2 = new A(2); $cl = $ob1->getClosure();
echo $cl(), "\n"; //
$cl = $cl->bindTo($ob2);
echo $cl(), "\n"; //
var_dump($cl instanceof \Closure); //bool(true)
 class A {
private static $sfoo = 1;
private $ifoo = 2;
}
$cl1 = static function() {
return A::$sfoo;
};
$cl2 = function() {
return $this->ifoo;
}; $bcl1 = Closure::bind($cl1, null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "\n"; //
echo $bcl2(), "\n"; //

												

深入理解PHP数组函数和预定义接口的更多相关文章

  1. 深入理解 PHP 的 7 个预定义接口

    深入理解预定义接口 场景:平常工作中写的都是业务模块,很少会去实现这样的接口,但是在框架里面用的倒是很多.   1. Traversable(遍历)接口 该接口不能被类直接实现,如果直接写了一个普通类 ...

  2. PHP预定义接口之 ArrayAccess

    最近这段时间回家过年了,博客也没有更新,感觉少学习了好多东西,也错失了好多的学习机会,就像大家在春节抢红包时常说的一句话:一不留神错过了好几亿.废话少说,这篇博客给大家说说关于PHP预定义接口中常用到 ...

  3. PHP预定义接口

    目录 引言 IteratorAggregate(聚合式aggregate迭代器Iterator) Countable ArrayAccess Iterator 总结 引言 在PHP中有好几个预定义的接 ...

  4. PHP Predefined Interfaces 预定义接口(转)

    SPL提供了6个迭代器接口: Traversable 遍历接口(检测一个类是否可以使用 foreach 进行遍历的接口) Iterator 迭代器接口(可在内部迭代自己的外部迭代器或类的接口) Ite ...

  5. PHP Predefined Interfaces 预定义接口

    SPL提供了6个迭代器接口: Traversable 遍历接口(检测一个类是否可以使用 foreach 进行遍历的接口) Iterator 迭代器接口(可在内部迭代自己的外部迭代器或类的接口) Ite ...

  6. 预定义接口-迭代器Iterator

    <?php /* 可在内部迭代自己的外部迭代器或类的接口. Iterator extends Traversable { abstract public mixed current ( void ...

  7. php 预定义接口

    Traversable Traversable { } 作用:检测一个类是否可以使用 foreach 进行遍历的接口. php代码中不能用.只有内部的PHP类(用C写的类)才可以直接实现Travers ...

  8. C++STL 预定义函数对象和函数适配器

    预定义函数对象和函数适配器 预定义函数对象基本概念:标准模板库STL提前定义了很多预定义函数对象,#include <functional> 必须包含. 1使用预定义函数对象: void ...

  9. PHP之数组函数

    php数组中的预定义变量 预定义常量 CASE_LOWER (integer) CASE_LOWER 用在array_change_key_case()中将数组的键名转换为小写字母.这也是array_ ...

随机推荐

  1. C#队列Queue,利用队列处理订单

    一.什么是队列 队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队. 这是摘抄网上的.做了 ...

  2. Python基础学习之变量赋值

    1.赋值操作符 Python语言中,等号(=)是主要的赋值操作符: >>> aInt=-100 >>> aString='this is a string' > ...

  3. 第三章 八位数字开关板&模拟输入板&火焰传感器

    这节我将带大家了解亮宁机器人基础外接硬件. 八位数字板开关 接线方法:W1~W8接23~37号数字端口,Enter接39号数字端口,vcc和gnd分别接正负. #include <LNDZ.h& ...

  4. py常见模块

    1.系统相关的信息模块: import sys sys.argv 是一个 list,包含所有的命令行参数. sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输 ...

  5. 关于vim、nvim的折腾

    1 from a view of enc ·nvim必须set enc=utf8,很多基于python的插件也默认了此,这对于中文这些并不友好,然而,vim支持多字节就好的多. 因为很多项目,大家可能 ...

  6. [译文]PHP千年虫(y2k compliance)

    时钟将我们无情地逼近2000年的最后一年,第二年厄运塞耶斯都预言前所未有的电脑故障在每一个可以想象的领域.通常被称为2000年问题,或千年虫,这种 情况很容易解释.程序解释两位在形成XX日期19 XX ...

  7. url网址解析的好帮手

    接下来进入node的重点,也就是介绍nodejs主要api的功能和如果使用,由于nodejs逐渐能满足这种高并发和大规模的场景.他才被更多的公司所采用 无论什么资源,一定要有明确的地址才有意义,在互联 ...

  8. Android开发之动态创建多个按钮

    //获取屏幕大小,以合理设定 按钮 大小及位置 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDispl ...

  9. Makefile 简述

    定义 Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员.在 Linux(unix )环境下使用GNU 的 ...

  10. url 解析

    最近在做一个单页应用,使用AngularJS来处理一些页内路由(哈希#后的路由变化).自然会要解析URL中的参数.使用AngularJS自带的方法$location.search();可以自动将参数整 ...