PHP如何使用array_filter()函数过滤数组键
时间:2017-07-28
本文章向大家介绍PHP如何使用array_filter()函数过滤数组键,需要的朋友可以参考一下。
回调函数array_filter()
只传递数组的值,而不传递键。
有以下php代码:
$my_array = array("foo" => 1, "hello" => "world");
$allowed = array("foo", "bar");
我想删除$my_array数组中的元素,该元素的键
不在$allowed
数组
期望输出如下:
$my_array = array("foo" => 1);
该如何实现呢?
第一种方法:
array_filter()函数在
PHP 5.6引入了第三个参数flag
,你可以设置为ARRAY_FILTER_USE_KEY
通过键,而不是值来筛选:
$my_array = ['foo' => 1, 'hello' => 'world'];
$allowed = ['foo', 'bar'];
$filtered = array_filter(
$my_array,
function ($key) use ($allowed) {
return in_array($key, $allowed);
},
ARRAY_FILTER_USE_KEY
);
显然,这并不像array_intersect_key($my_array, array_flip($allowed))
那样优雅,但它确实提供了对键执行任意测试的额外灵活性,例如$allowed
可以包含正则表达式而不是普通字符串。
您还可以使用ARRAY_FILTER_USE_BOTH
将值和键传递给过滤器函数。这是一个基于第一个的人为例子,但请注意,我不建议使用$allowed
这种方式编码过滤规则:
$my_array = ['foo' => 1, 'bar' => 'baz', 'hello' => 'wld'];
$allowed = ['foo' => true, 'bar' => true, 'hello' => 'world'];
$filtered = array_filter(
$my_array,
function ($val, $key) use ($allowed) { // N.b. $val, $key not $key, $val
return isset($allowed[$key]) && (
$allowed[$key] === true || $allowed[$key] === $val
);
},
ARRAY_FILTER_USE_BOTH
); // ['foo' => 1, 'bar' => 'baz']
第二种方法:
使用闭包的更灵活的解决方案:
$my_array = array("foo" => 1, "hello" => "world");
$allowed = array("foo", "bar");
$result = array_flip(array_filter(array_flip($my_array), function ($key) use ($allowed)
{
return in_array($key, $allowed);
}));
var_dump($result);
输出:
array(1) {
'foo' =>
int(1)
}
- centos6下redis cluster集群部署过程
- centos6下ActiveMQ+Zookeeper消息中间件集群部署记录
- 发布一个轻量级的滑块控件
- as3:sprite作为容器使用时,最好不要指定width,height
- openssl版本升级操作记录
- 清除浮动(clearfix hack)
- Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)
- 小程序火爆的因素
- Log4Net使用心得
- nginx通过https方式反向代理多实例tomcat
- Linux系统下yum镜像源环境部署记录
- 特斯拉vs凯迪拉克vs奔驰:三大汽车自动驾驶系统比拼
- Centos下添加静态路由(临时和永久有效)的操作记录
- python如何保证输入键入数字
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 【赵渝强老师】Weblogic域和域的组成
- 前端生僻字显示
- redis密码操作
- SpringBoot 整合 gradle 集成ActiveMQ
- 利用python自动写docx报告
- Maven构建项目速度太慢的解决办法
- 基于kubernetes Api完成更新镜像版本
- 代码覆盖率是什么?如何查看?
- 3分钟短文 | Laravel 注册全局助手函数的2种方式
- 通过案例学Python之定义函数类
- 3分钟短文 | Laravel blade模板里优雅地定义PHP变量
- MySQL 日期时间类型怎么选?千万不要乱用!
- InnoDB存储引擎简介
- git改错分支的补救方法:git stash暂存
- 快速学习-Skywalking原理