ArrayHelper.php


<?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;
}
}

php 数组助手类的更多相关文章

  1. Yii2 数组助手类arrayHelper

    数组助手类 ArrayHelper 1.什么是数组助手类 Yii 数组助手类提供了额外的静态方法,让你更高效的处理数组. a.获取值(getValue) class User { public $na ...

  2. Yii的数组助手类

    获取值 用原生PHP从一个对象.数组.或者包含这两者的一个复杂数据结构中获取数据是非常繁琐的. 你首先得使用isset 检查 key 是否存在, 然后如果存在你就获取它,如果不存在, 则提供一个默认返 ...

  3. ADO.NET数据库操作助手类

    SQL语句操作增删查改助手类 using System; using System.Collections.Generic; using System.Configuration; using Sys ...

  4. Java学习笔记七——数组工具类Arrays

    数组工具类Arrays Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组.若将里面的方法用熟的话,那开发效率会大大提高.下面介绍其中的方法. List<T> ...

  5. 【C#】SQL数据库助手类2.0(自用)

    using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...

  6. 数组工具类 - ArrayUtil.java

    数组工具类,提供数组.对象之间转换的方法. 源码如下:(点击下载 - ArrayUtil.java .commons-lang-2.6.jar) import java.lang.reflect.Ar ...

  7. java数组 数组工具类Arrays

    一.数组 1.java有严格的数据类型限制,一个数组只能声明一个数据类型,存放同一种数据类型. 2.虽然只能存放一种数据类型,假设A , 如果数据类型B 继承A,依然能存放进入数组. 3.数组的初始化 ...

  8. java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象

    1. java.util.Arrays  数组工具类    Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...

  9. AES加密解密 助手类 CBC加密模式

    "; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...

随机推荐

  1. HGOI20190808 省常中互测1

    Problem A  sum 给出$n$个元素的序列$\{a_i\}$,求出两个不相交连续子序列的最大元素和. 即对于$1 \leq A \leq B \leq C \leq D \leq n$最大化 ...

  2. [CSP-S模拟测试]:城市游戏(图论+DP)

    题目传送门(内部题109) 输入格式 第一行,两个整数$n,m$. 接下来$m$行,每行三个整数$u,v,l$,描述了一条道路连接的两个路口的编号以及道路的长度. 输出格式 输出一行一个整数,为所求的 ...

  3. IDEA配置常见配置

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  4. R语言爬取动态网页之环境准备

    在R实现pm2.5地图数据展示文章中,使用rvest包实现了静态页面的数据抓取,然而rvest只能抓取静态网页,而诸如ajax异步加载的动态网页结构无能为力.在R语言中,爬取这类网页可以使用RSele ...

  5. Python学习笔记:list的各种操作

    向一个列表中添加单个元素: my_list = []my_list.append('我爱你') 移除列表中的某个元素: my_list.pop(0) # 0是需要移除元素在列表中的index 或者是移 ...

  6. ajaxGird修改一条记录中的字段

    var rowData = ajaxgrid.getSelectedRow(); var quality = rowData["quality"]; var rowIndex = ...

  7. day8_文件操作及编码解码

    一.文件操作基本流程 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所 ...

  8. 【flask】使用pipenv管理依赖环境

    [前堤] 已经安装了pipenv环境,并且项目目录下存在pipfile 如果要在另一个开发环境做开发,则将代码和Pipfile复制过去,运行以下命令: pipenv install --dev 是否要 ...

  9. 第三章 SpringCloud之Eureka-Client服务提供者

    1.Eureka-Client简介 #################接下来开始程序啦########################## 1.pom.xml <?xml version=&qu ...

  10. flutter 图片圆角

    return Center( child: Container( padding: EdgeInsets.only(left: 10), width: 120, height: 80, child: ...