该功能主要用到 array_filter() 函数,这个函数可以用回调函数过滤数组中的单元。用法:

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

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

其中,flag 可以指定传入回调函数是数组的键值、元素值、还是键值和元素值两者都有。默认情况下只传入元素值,如果要根据键值,flag需要设置为 ARRAY_FILTER_USE_KEY ,不过只有PHP5.6.0及之后的版本才能直接使用这个参数,之前的版本需要额外处理,文章最后我们会提供处理的代码。

我们就是利用这样的特性获取奇偶数组,如下。

1 根据键值(key)提取

<?php
function odd($var)
{
// 返回$var最后一个二进制位,
// 为1则保留(奇数的二进制的最后一位肯定是1)
return($var & 1);
} function even($var)
{
// 返回$var最后一个二进制位,
// 为0则保留(偶数的二进制的最后一位肯定是0)
return(!($var & 1));
} $array1 = array("a"=>1, "4"=>2, "5"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 19); echo "奇数:\n";
print_r(array_filter($array1, "odd", ARRAY_FILTER_USE_KEY)); echo "偶数:\n";
print_r(array_filter($array2, "even", ARRAY_FILTER_USE_KEY));
?>

注意:传入的数组需是索引数组,也就是下标是数字的数组,其他类型下标的元素会导致输出不准确。

2 根据元素值(value)提取

根据元素值提取与根据键值的唯一区别是,传给array_filter的是哪一个。如果根据元素值,array_filterflag 直接为空,保留默认值即可。

<?php
function odd($var)
{
// 返回$var最后一个二进制位,
// 为1则保留(奇数的二进制的最后一位肯定是1)
return($var & 1);
} function even($var)
{
// 返回$var最后一个二进制位,
// 为0则保留(偶数的二进制的最后一位肯定是0)
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 "奇数:\n";
print_r(array_filter($array1, "odd"));
echo "偶数:\n";
print_r(array_filter($array2, "even"));
?>

3 简化写法

例如,在以上的例子中,我们根据偶数下标提取元素,可以通过匿名函数简化实现,如下:

<?php
$array = array(6, 7, 8, 9, 10, 11, 12); $array_odd = array_filter($array2, function($var) {
return ($var & 1);
}, ARRAY_FILTER_USE_KEY); print_r($array_odd);
?>

如果是PHP 5.6.0之前的版本,需要额外处理,如下:

<?php
$array = array(6, 7, 8, 9, 10, 11, 12); $keys = array_filter(array_keys($array), function($key) {
return ($key & 1);
}); $array_odd = array_intersect_key($array, $keys);
?>

文章转自:https://www.awaimai.com/891.html

关注微信公众号:lovephp

PHP提取奇数或偶数下标元素的更多相关文章

  1. PHP 提取数组中奇数或偶数的元素array_filter

    //提取奇数 $filter = array_filter($ql,function($var){ return($var & 1); },ARRAY_FILTER_USE_KEY); pri ...

  2. CSS奇数、偶数、指定数样式

    原文: https://blog.csdn.net/wangjia200913/article/details/49615325 语法    :nth-child(an+b) 第一种:简单数字序号写法 ...

  3. 剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)

    题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输 ...

  4. 剑指offer:调整数组顺序使奇数位于偶数前面

    题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...

  5. 循环赛日常表算法(N可为奇数和偶数)

    一. 实验题目 设有n位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空.试按此要求为比赛安排日程. 二.实验目的 1.深刻理解并掌 ...

  6. 《剑指offer》面试题14 调整数组顺序使奇数位于偶数前面 Java版

    (输入整数数组,使所有奇数位于前半部分,所有偶数位于后半部分.) 我的方法:想到用两个下标分别表示奇数和偶数的界线,一个在开头,一个在末尾,判断每一个数字的类别,然后将它放入对应的范围内,移动下标,直 ...

  7. 剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面

    一.题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 例如有以下一个整数数组:12345 ...

  8. php如何实现原址排序数组使奇数位于偶数前面(代码)

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 1.遍历数组,判断元素奇数偶数 ...

  9. 《剑指offer》 调整数组顺序使得奇数在偶数前面

    本题来自<剑指offer> 调整数组顺序使得奇数在偶数前面 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分, ...

随机推荐

  1. CSS超链接的常见设置

    一般对超连接常见的设置,就是设置文字大小,下划线,颜色等等. 先讲解一下,超链接的四种状态 /* 未被访问的链接 */ a:link {color:#FF0000;} /* 已被访问的链接 */ a: ...

  2. Django Rest Framework进阶二

    一.版本 版本控制:当程序越来越大,后期需要再加入一些功能或者进行二次开发时就需要加上版本号了. 之前我们在没有接触rest_framework之前一般是以下这种方式来实现的 class UserVi ...

  3. 零基础逆向工程36_Win32_10_互斥体_互斥体与临界区的区别

    1 引言 讲了第二个内核对象,互斥体.前面已经学过一个内核对象,线程.这节讲两个函数,WaitForSingleObject()和WaitForMultipleObjects().因此这两个函数是根据 ...

  4. oracle 递归查询(来源于网络)

    比如 a   b a   c   a   e b   b1 b   b2 c   c1 e   e1 e   e3 d   d1 指定parent=a,选出 a   b a   c   a   e b ...

  5. VS 打开时默认使用管理员权限

    1. 打开VS的安装目录,找到devenv.exe,右键,选择“兼容性疑难解答”. 2. 选择“疑难解答程序” 3. 选择“该程序需要附加权限” 4. 确认用户帐户控制后,点击测试程序,不然这个对话框 ...

  6. 搭建日志环境并配置显示DDL语句

    现在一般用log4j用的比较多,用slf4j用的比较少,所有这里我们就不用 hibernate内置的slf4j了. 用到slf的接口,log4j的实现. 要在hibernate中使用log4j,如图所 ...

  7. [RDLC]心得整理(一)

    2014年在做项目的时候, 过用过RDLC, 之后便在没有使用过了. 最近又有项目使用rdlc, 感觉有些陌生,然后重新阅读了以前的笔记,想做一下整理. 常见问题: 1. 为什么rdlc报表出来的pd ...

  8. vue checkbox 双向绑定及初始化渲染

    双向绑定可以绑定到同一个数组 <input type="checkbox" id="jack" value="Jack" v-mode ...

  9. 51nod 1366 贫富差距

    题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个国家有N个公民,标记为0,1,2,...,N-1,每个公民有一个存款额.已知每个公 ...

  10. *389. Find the Difference (string + map(26)) read problems carefully

    Given two strings s and t which consist of only lowercase letters. String t is generated by random s ...