文档章节

php数组助手类

Falltohim
 Falltohim
发布于 2017/03/31 11:35
字数 909
阅读 32
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

<?php

 
/**
 * php 数组助手类
 * Class ArrayHelper
 * @package app\helper
 */
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;
    }
}

 

本文转载自:

Falltohim
粉丝 0
博文 6
码字总数 1363
作品 0
石家庄
私信 提问
在Laravel中创建自己的PHP帮助函数

Laravel 为我们提供了许多内置的帮助函数,你可以在应用程序中的任何位置调用它。它们使你可以方便地处理数组和对象,路径,字符串,URL和其他类型的工作流。 尽管在 Laravel 核心中定义了许...

如来神掌
2018/04/28
113
0
[翻译]CI从2.2升级到3.0

英文原文 从2.2 升级到3.0更新之前先保证网站处于离线状态. 步骤 1: 更新 CI 所有文件 替换 system 目录下所有文件,然后替换index.php文件,如果之前有更新index.php,请在新的文件上做更改. 你...

2688
2016/03/02
164
2
ThinkPHP 发布 5.2 Beta2 版本——统一并精简大量用法

ThinkPHP5.2第二个测试版本发布了。这次主要改进了方法的处理机制,统一和简化了很多查询用法。(安装和基本使用请参考这里) 主要更新 改进了fetchSql的解析机制 引入了单独的类单独处理方法...

流年
2018/11/26
2.2K
15
PHP HMVC 框架 - Koseven

Koseven:Kohana 继承者,适用于 PHP 7 的 HMVC 框架。 Koseven源自Kohana,不过由于历史原因,Kohana is dead!!社区大牛接手了Kohana最终版,在此基础上开发了一套适用于PHP7的HMVC框架K...

匿名
2019/05/22
762
3
ThinkPHP5开发的正确姿势——PHP最佳实践的参考规范

安装篇 使用composer,既然是趋势就早日拥抱,能写PHP的这点工具用不来说不过去(另外官方的所有扩展都会以composer方式提供); 如果只需要核心单独安装核心框架就行了,应用仓库并非必须;...

小和
2016/11/13
2.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

dynamic-connectivity 动态连通性问题之 quick-union 算法

quick-union 的思想是:若对象 p 的 root_id 和对象 q 的 root_id 相等,则认为 p 和 q 连通。 若要将对象 p 和对象 q 连通(已知两对象未连通),则将 p 的 root_id 的值设为 q 的 root_id ...

Phpythoner_Alei
今天
40
0
OSChina 周六乱弹 —— 实在选不出来就唱国歌

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享阿冗的单曲《你的答案》。--祝大家在2020年都找到自己答案。 《你的答案》- 阿冗 手机党少年们想听歌,请使劲...

小小编辑
今天
25
1
Maven打包可执行Jar包的方法

在使用Java开发中,会使用到将工程打包成可执行的jar包的情况,那么在maven中怎么将项目中的依赖包都添加到jar中呢。在pom.xml中添加一下插件: <build><plugins><plugin><ar...

CapJes
今天
13
0
使用vue 开发地图类系统(openlayers.js)的注意。

使用vue 开发地图类系统的注意。 1、使用地图应该创建的对象 少使用 vue 的data 和计算属性(comments)存数据或是vuex。 为什么要要注意这个问题呢? 答:这个就要了解到vue的实现原理 。原理...

DY-Tao
昨天
10
0
web移动端学习:高德地图demo(一)

在高德地图开发中申请开发者资格,然后在控制台中新建应用,获得KEY; 新建模板HTML文件; <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>地图demo</title><scri......

dxiya
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部