zoukankan      html  css  js  c++  java
  • php 数组助手类


    ArrayHelper.php

    
    <?php
    
     
    /**
     * php 数组助手类
     * Class ArrayHelper
     * @package apphelper
     */
    class ArrayHelper {
        /**
         * @brief   get_ids_arr     取得某个二维数组里的id集合
         *-----------------------------------------------
         *  $arr = array(
         *              array('line_id'  =>  1, 'title'    =>  '标题1',),
         *              array('line_id'  =>  2, 'title'    =>  '标题2',),
         *          );
         *  $line_ids = $this->share->get_ids_arr($arr);
         *-----得到--------------------------------------
         *  $line_ids = array(1, 2);
         *-----------------------------------------------
         * @Param   $arr            原始数组
         * @Param   $field          需要的字段:如 id, line_id, cid...
         * @Param   $zero           是否增加一个元素0,防止空数组导致where_in('id', $ids)出错
         *
         * @Returns Array
         */
        public static function get_ids_arr($arr = array(array('id'=>1, 'other'=>''),), $field = 'id', $zero = false){
            $new_arr = array();
            foreach ($arr as $ak=>$av) {
                if (!array_key_exists($field, $av)) {
                    break;      //非法数组
                }
                $new_arr[] = $av[$field];
            }
            if (empty($new_arr) && $zero) {
                $new_arr[] = 0;
            }
    
            return $new_arr ? array_unique($new_arr) : $new_arr;
        }    /**
         * @brief   reform_arr  重组数组
         * --------------------------------------------
         *  $arr = array(
         *              array('line_id'  =>  11, 'title'    =>  '标题1',),
         *              array('line_id'  =>  22, 'title'    =>  '标题2',),
         *          );
         *  $new_arr = $this->share->reform_arr($arr);
         * ----得到------------------------------------
         *  array(
         *          11=>array('line_id'  =>  11, 'title'    =>  '标题1',),
         *          22=>array('line_id'  =>  22, 'title'    =>  '标题2',),
         *      );
         * --------------------------------------------
         * @Param   $arr
         * @Param   $field
         *
         * @Returns Array
         */
        public static function reform_arr($arr = array(array('id'=>1, 'other'=>''),), $field = 'id'){
            $new_arr = array();
            if (!is_array($arr)) {
                return $new_arr;
            }
            foreach ($arr as $av) {
                if (!is_array($av)) {
                    break;
                }
                if (!array_key_exists($field, $av)) {
                    break;
                }
                if (!isset($new_arr[$av[$field]])) {
                    $new_arr[$av[$field]] = $av;
                }
            }
            return $new_arr;
        }
    
        /**
         * Builds a map (key-value pairs) from a multidimensional array or an array of objects.
         * The `$from` and `$to` parameters specify the key names or property names to set up the map.
         * Optionally, one can further group the map according to a grouping field `$group`.
         *
         * For example,
         *
         * ~~~
         * $array = [
         *     ['id' => '123', 'name' => 'aaa', 'class' => 'x'],
         *     ['id' => '124', 'name' => 'bbb', 'class' => 'x'],
         *     ['id' => '345', 'name' => 'ccc', 'class' => 'y'],
         * ];
         *
         * $result = ArrayHelper::map($array, 'id', 'name');
         * // the result is:
         * // [
         * //     '123' => 'aaa',
         * //     '124' => 'bbb',
         * //     '345' => 'ccc',
         * // ]
         *
         * $result = ArrayHelper::map($array, 'id', 'name', 'class');
         * // the result is:
         * // [
         * //     'x' => [
         * //         '123' => 'aaa',
         * //         '124' => 'bbb',
         * //     ],
         * //     'y' => [
         * //         '345' => 'ccc',
         * //     ],
         * // ]
         * ~~~
         *
         * @param array $array
         * @param string|Closure $from
         * @param string|Closure $to
         * @param string|Closure $group
         * @return array
         */
        public static function map($array, $from, $to, $group = null)
        {
            if(!is_array($array)){
                return array();
            }
            $result = [];
            foreach ($array as $element) {
                if(!array_key_exists($from,$element) OR !array_key_exists($to,$element))
                {
                    continue;
                }
                $key   = $element[$from];
                $value = $element[$to];
                if ($group !== null) {
                    if(!array_key_exists($group,$element))
                    {
                        continue;
                    }
                    $result[$element[$group]][$key] = $value;
                } else {
                    $result[$key] = $value;
                }
            }
    
            return $result;
        }    /**
         * @brief   get_ids_str     取得某个二维数组里的id集合,组成字符串
         *-----------------------------------------------
         *  Array
        (
        [0] => Array
        (
        [id] => 9613
        [total] => 4
        )
        [1] => Array
        (
        [id] => 1234
        [total] => 5
        )
    
        )
         *  $line_ids = $this->share->get_ids_str($arr);
         *-----得到--------------------------------------
         *  $line_ids = 9613,1234;
         *-----------------------------------------------
         * @Param   $arr            原始数组
         * @Param   $field          需要的字段:如 id, line_id, cid...
         * @Param   $zero           是否增加一个元素0,防止空数组导致WHERE id IN('')出错
         *
         * @Returns string
         */
        public static function get_ids_str($arr = array(array('id'=>1, 'other'=>''),), $field = 'id', $zero = false){
            return join(',', self::get_ids_arr($arr, $field));
        }
    
        /**
         * @brief   array_pop_ele_byval     根据指定值剔除数组中的元素
         * ---------------------------------------------
         *  Example
         *      $arr = array('a'=>'hello', 'b'=>'abc', 'c'=>'hello');
         *      $arr = $this->share->array_pop_ele_byval($arr, 'hello');
         *      print_r($arr);exit;
         * --------------------------------------------
         * @Param   $arr
         * @Param   $val
         *
         * @Returns Array
         */
        public static function array_pop_ele_byval($arr, $val = ''){
            if (!is_array($arr)) {
                return false;
            }
            foreach ($arr as $ak=>$av) {
                if ($av == $val) {
                    unset($arr[$ak]);
                }
            }
            return $arr;
        }    /**
         * @brief   array_pop_ele_bykey     根据指定指定下标剔除元素
         * ---------------------------------------------
         *  Example
         *      $arr = array('a'=>'hello', 'b'=>'abc', 'c'=>'hello');
         *      $arr = $this->share->array_pop_ele_bykey($arr, 'a');
         *      print_r($arr);exit;
         * --------------------------------------------
         * @Param   $arr
         * @Param   $key
         *
         * @Returns Array
         */
        public static function array_pop_ele_bykey($arr, $key=''){
            if (!is_array($arr)) {
                return false;
            }
            foreach ($arr as $ak=>$av) {
                if ($ak == $key) {
                    unset($arr[$ak]);
                }
            }
            return $arr;
        }    /**
         * @brief   array2sort  二维数组 根据指定下标 排序(冒泡)    保持索引关系
         * --------------------------------------------------------------------
         * $arr = array(
         *     'a'=>array( 'key1'=>3,   'key2'=>50,),
         *     'b'=>array( 'key1'=>79,  'key2'=>30,),
         *     'c'=>array( 'key1'=>8,   'key2'=>40,),
         *     'd'=>array( 'key1'=>55,  'key2'=>20,),
         *     11=>array( 'key1'=>2,   'key2'=>300,),
         *     );
         *  $arr = array2sort($arr, 'key2', 'a');print_r($arr);
         *--------------------------------------------------------------------
         * @Param   $arr        待排序数组,(既可以是索引数组,也可以是关系型数组)
         * @Param   $key        要排序的下标
         * @Param   $sort       d-降序 a-升序
         *
         * @Returns Array
         */
        public function array2sort($arr, $key='', $sort = 'd'){
            $n = count($arr);
            $tmp = array();
            if (empty($arr) || empty($key) || !in_array($sort, array('d', 'a'))) {
                return $arr;
            }
            foreach ($arr as $ak=>$av) {            //为保持索引关系,将Key压入数组最后一个元素值保存
                array_push($arr[$ak], $ak);
            }
            $arr = array_values($arr);
            for ($i = 0; $i < $n; $i++) {
                for ($j = $n-1; $j > $i; $j--) {
                    //降序排列
                    if ($sort == 'd') {
                        if (isset($arr[$i][$key]) && $arr[$i][$key] < $arr[$j][$key]) {
                            $tmp = $arr[$i];
                            $arr[$i] = $arr[$j];
                            $arr[$j] = $tmp;
                        }
    
                        //升序排列
                    } else {
                        if (isset($arr[$i][$key]) && $arr[$i][$key] > $arr[$j][$key]) {
                            $tmp = $arr[$j];
                            $arr[$j] = $arr[$i];
                            $arr[$i] = $tmp;
                        }
                    }
                }
            }
    
            $new_arr = array();
            foreach ($arr as $ak=>$av) {        //为保持索引关系,将最右一个元素值key,拿出来放到下标里
                $tmp_key = array_pop($arr[$ak]);
                $new_arr[$tmp_key] = $arr[$ak];
            }
            return $new_arr;
        }
    }
    
    
  • 相关阅读:
    search
    longestValidParentheses
    nextPermutation
    linux下通过安装xampp搭建环境卸载xampp、以及网站搬家-64位系统Apache启动不了的问题
    对拍器 ADC-ACMDataCreater
    Educational Codeforces Round 86 (Rated for Div. 2) A~D
    Codeforces Round #637 (Div. 2) A~D
    Codeforces Round #636 (Div. 3) A~D
    Codeforces Round #635 (Div. 2) A~D
    原型设计工具比较及实践 基于WolframAlphaAPI的科学计算器原型设计
  • 原文地址:https://www.cnblogs.com/datiangou/p/10199960.html
Copyright © 2011-2022 走看看