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 数组中的每个值传递到 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 :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
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():返回数组,是为 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
)
array_filter与array_map的更多相关文章
- array_filter、array_map、array_walk解释
/** * array_filter 用回调函数处理数组中的各个元素, * 重点在于过滤(而不是新增)某个元素,当你处理到一个元素时, * 如果返回了false,那么这个元素将会被过滤掉.PS:保持了 ...
- php数组操作集锦- 掌握了数组操作, 也就掌握了php
参考下面的文章, 是很好的: http://www.cnblogs.com/staven/p/5142515.html http://pcwanli.blog.163.com/blog/static/ ...
- 创造tips的秘籍——PHP回调后门
作者:Phithon 原文连接:https://www.leavesongs.com/PENETRATION/php-callback-backdoor.html 最近很多人分享一些过狗过盾的一句话, ...
- 利用php数组函数进行函数式编程
因为一个BUG, 我在一个摇摇欲坠,几乎碰一下就会散架的项目中某一个角落中发现下面这样一段代码 这段程序与那个BUG有密切的关系. 我来回反复的捉摸这段代码, 发现这段代码实现了两个功能 第一个是在一 ...
- PHP从入门到精通
php基本语法 1.变量类型 a.标量类型 bool integer float string b.复合类型 array object c.特殊类型 resource null d.伪类型 mixd ...
- PHP 数组使用之道
本文首发于 PHP 数组使用之道,转载请注明出处. 这个教程我将通过一些实用的实例和最佳实践的方式列举出 PHP 中常用的数组函数.每个 PHP 工程师都应该掌握它们的使用方法,以及如何通过组合使用来 ...
- Webshell免杀绕过waf
转自圈子404师傅 0x01 前言# 尽最大努力在一文中让大家掌握一些有用的WEBSHELL免杀技巧 0x02 目录# 关于eval 于 assert 字符串变形 定义函数绕过 回调函数 回调函数变形 ...
- 转载:利用php数组函数进行函数式编程
因为一个BUG, 我在一个摇摇欲坠,几乎碰一下就会散架的项目中某一个角落中发现下面这样一段代码 这段程序与那个BUG有密切的关系. 我来回反复的捉摸这段代码, 发现这段代码实现了两个功能 第一个是在一 ...
- PHP常见代码执行后门函数
PHP常见代码执行后门函数 代码执行: 应用程序在调用一些能够将字符串转换为代码的函数(例如php中的eval中),没有考虑用户是否控制这个字符串,将造成代码执行漏洞. 常见php代码执行函数介绍 常 ...
随机推荐
- Linux中的文件查找技巧
前言 Linux常用命令中,有些命令可以帮助我们查找二进制文件,帮助手册或源文件的位置,也有的命令可以帮助我们查找磁盘上的任意文件,今天我们就来看看这些命令如何使用. witch witch命令会在P ...
- 【Linux基础】VM使用
VM三种联网方法和原理 (1)Bridged桥接 使用VMnet0虚拟交换机,此时虚拟机相当与网络上的一台独立计算机与主机一样,拥有一个独立的IP地址,所有机器均可互访,可以联网.使用桥接方式,A,A ...
- cents上运行wget报错:unable to resolve host address
wget命令报错.无法解析域名"www.keepalived.rog" [vagrant@RS1 download]$ wget http://www.keepalived.org ...
- 如何在tomcat前部署一个nginx
在tomcat应用已经发布后,如何在tomcat前部署一个nginx,可以正常访问jsp,静态资源(html,css,js) 这里tomcat的端口号是8888 upstream morris { s ...
- [matlab] 17.网格矩阵
生成网格矩阵,并且根据条件筛选,重新赋值为0,1二值图像 clear all;close all; %生成二值图 index= randperm(2500,1000); %生成10个不重复随机指标 Z ...
- Android-SpinKit 进度条 (ProgressBar)
项目地址: https://github.com/ybq/Android-SpinKit 类别: 进度条 (ProgressBar) 打分: ★★★★★ 更新: 2016-03-28 11:17 大小 ...
- 【编辑器】sublime 标题栏中文乱码问题
首选项--------设置-用户中添加"dpi_scale": 1.0,如下图所示 作者:smile.轉角 QQ:493177502
- Linux下简单的缓冲区溢出
缓冲区溢出是什么? 科班出身,或者学过汇编的应该知道,当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持 ...
- 普通用户使用Docker
1.查询是否有docker组 cat /etc/group 如果没有可以通过该命令添加(一般默认是有的) sudo groupadd docker 2.将当前用户添加到docker组 sudo use ...
- python日志等级输出删选
有时候我们会删选一下输出的信息 当做日志进行文件保存 但是我们程序中有可能有自己不想存到日志文件中的输出信息 我们要做一些的删选 然后进行保存 代码如下: #!/usr/bin/python # - ...