• 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);
        }
    }
    ?>
  • 相关阅读:
    POJ 1987 Distance Statistics(树的点分治)
    rabbitmq-c初探
    [置顶] Android开发实战记录(三)---HelloWorld
    debug连线指令
    Qt之信号连接,你Out了吗?
    hdu-4607-Park Visit
    MySQL 分区表 partition线上修改分区字段,后续进一步学习partition (1)
    如何用正则将多个空格看成一个空格结合spllit()方法将文本数据入库
    hdu 1711 Number Sequence(KMP模板题)
    [leetcode]Unique Paths
  • 原文地址:https://www.cnblogs.com/jso0/p/4720946.html
Copyright © 2020-2023  润新知