PHP获取二维数组中的指定若干列【同array_column】

PHP5.3以上  用到了array_map 使用匿名函数进行处理

代码:

<?php
function array_col($arr = array(), $idx = 0, $newidx = 0)
{
    if (function_exists('array_column') && !is_array($idx) && is_bool(strpos($idx, ',', 1))) {
        return array_column($arr, $idx, $newidx);
    } else {
        return array_map(function($element) use($idx, $newidx) { 
            $ret_arr = array();
            $tmp = !is_array($idx) && is_int(strpos($idx, ',', 1))?explode(',', $idx):0;
            $ntmp = !is_array($newidx) && is_int(strpos($newidx, ',', 1))?explode(',', $newidx):0;
            if (empty($tmp)) {
                return $ret_arr;
            }
            $tmpc_idx = count($tmp);
            $tmpc_newidx = count($ntmp);
            if (is_int($ntmp) || empty($ntmp)) {
                for ($i=0; $i < $tmpc_idx; $i++) { 
                    $ret_arr[]=$element[$tmp[$i]];
                }
            } else {
                if ($tmpc_newidx>=$tmpc_idx) {
                    for ($i=0; $i < $tmpc_newidx; $i++) { 
                        $ret_arr[$element[$ntmp[$i]]]=$element[$tmp[$i]];
                    }
                }
            }
            return $ret_arr;
        }, $arr);
    }
}


$a = array( 
    array( 
        'id' => 2135, 
        'first_name' => 'John', 
        'last_name' => 'Doe', 
    ), 
    array( 
        'id' => 3245, 
        'first_name' => 'Sally', 
        'last_name' => 'Smith', 
    ) 
); 

var_export( array_col($a, 'id,last_name','first_name,first_name')); 

?>

output:

<?php
array (//覆盖掉了
  0 =>
  array (
    'John' => 'Doe',
  ),
  1 =>
  array (
    'Sally' => 'Smith',
  ),
)
?>

 

new ONE

<?php
function array_col($arr = array(), $idx = array(), $newidx = array(), $pfx = 'var_', $sp = '+')
{
    if (function_exists('array_column') && !is_array($idx) && is_bool(strpos($idx, ',', 1))) {
        return array_column($arr, $idx, $newidx);
    } else {
        return array_map(function($element) use($idx, $newidx, $sp, $pfx) { 
            $ret_arr = array();
            $tmp = !is_array($idx)?explode(',', $idx):array();
            $ntmp = !is_array($newidx)?explode(',', $newidx):array();
            $tmpc_idx = count($tmp);
            $tmpc_newidx = count($ntmp);
            if (is_int($ntmp) || empty($ntmp)) {
                for ($i=0; $i < $tmpc_idx; $i++) { 
                    $ret_arr[]=$element[$tmp[$i]];
                }
            } else {
                $ele_keys = array_keys($element);
                if (!empty($tmp) && $tmpc_newidx>=$tmpc_idx) {
                    for ($i=0; $i < $tmpc_newidx; $i++) { 
                        $keys=explode('+', $ntmp[$i]);
                        if (empty($keys) || !in_array($tmp[$i], $ele_keys)) {
                            continue;
                        }
                        $ret_arr[$pfx . join($sp, array_intersect_key($element,array_flip($keys)))]=$element[$tmp[$i]];
                    }
                }
            }
            return $ret_arr;
        }, $arr);
    }
}
?>

 

转载于:https://www.cnblogs.com/jso0/p/4720946.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值