PHP array_filter函数的一点应用 获取二维数组中指的键值的结果

array array_filter ( array [, callback callback] ) 

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


/**
     * @name linq and 实现
     * @param array $socure
     * @param array $condition key: $socure中的key value: 和$socure中相对应的值相比较 全部为真才为真
     * @return multitype:|boolean
     */
    public static function WhereAnd($socure, array $condition) {

        return array_filter($socure, function ($value) use($condition) {
            $re = true;
            foreach ($condition as $k => $v) {
                if (!isset($value[$k]) || $value[$k] != $v) {
                    $re = false;
                    break;
                }
            }
            return $re;
        });
    }

    public static function WhereBitwise($socure, array $condition) {

        return array_filter($socure, function ($value) use($condition) {
            $re = true;
            foreach ($condition as $k => $v) {
                if (($value[$k] & $v) > 0) {
                    $re = false;
                    break;
                }
            }
            return $re;
        });
    }

    /**
     * @name linq or 实现
     * @param array $socure
     * @param array $condition key: $socure中的key value: 和$socure中相对应的值相比较 存在为真就为真
     * @return multitype:|boolean
     */
    public static function WhereOr($socure, array $condition) {

        return array_filter($socure, function ($value) use($condition) {
            $re = false;
            foreach ($condition as $k => $v) {
                if ($value[$k] == $v) {
                    $re = true;
                    break;
                }
            }
            return $re;
        });
    }

 三个方法

1、第一个方法是通过array_filter 的特性,然后匹配$condition 这个数组中的键值对,将$condition 中的所有兼职通过&&筛选返回针对源数组筛选之后的结果。

2、第二个方法是将$conditon 中的键值对通过按位与的方式确定筛选结果

3、第三个方法是将$condtion 中的键值对通过|| 筛选确定筛选结果。


分享一点小小的技巧,省却简单的筛选下每次都要写foreach的烦恼,当然我更多应用的还是第一个方法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值