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. CSP-S2 游记

    CSP-S2 游记 & AFO 感想 Day0 早上考了一场式,非常简单,但是懒得写正解.230pts. 晚上听了一下WYQ大神的考前直播,写了一下树上倍增(我是不会告诉你我还写炸了) 与lu ...

  2. AtCoder AGC037D Sorting a Grid (二分图匹配)

    题目链接 https://atcoder.jp/contests/agc037/tasks/agc037_d 题解 这场D题终于不像AGC032D和AGC036D一样神仙了-- 还是可做的吧 虽然考场 ...

  3. JS框架_(JQuery.js)夜晚天空满天星星闪烁动画

    百度云盘 传送门 密码:xftr 满天星星闪烁动画效果: (可用星空动画来作为页面背景,白色文字改为文章或者其他的O(∩_∩)O) <!doctype html> <html> ...

  4. Mac安装ipython与jupyter

    Python从Python发展而来,更倾向于科学计算.互联网数据分析更喜欢用. 首先切换root用户: sudo su - pip3自动安装ipython yuchaodeMacBook-Pro:~ ...

  5. Django JWT

    概述 如果各位不了解 JWT,不要紧张,它并不可怕. JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 让我们来假想一下一个 ...

  6. 五、smarty模板继承特性

    1.如何去实现模板之间的继承 继承是发生在模板之间的事,和PHP程序没有关系的 方法一: 在模板中使用<{extends}>函数实现模板的继承 <{extends file=”模板文 ...

  7. ActiveMQ 初学-1:ActiveMQ 创建连接对象

      县创建mq的连接工厂对象 ActiveMQConnectionFactory   // 1 建立ConnectionFactory 工厂对象,需要填入,需要填入用户名密码, // 用户名 密码 在 ...

  8. docker容器无法删除——状态Dead

    问题:由于容器挂载数据卷,无法直接删除. 解决: 先查出ID 进行杀掉,然后再删除. . 搞定

  9. LVM创建过程

    磁盘挂载需求/cachesys 50G /journal 300G /wij 50G /dthealth 20G /data 500G /backup 500G #第1步,创建pv,并查状态信息.ls ...

  10. Uep的ajaxform和ajaxgrid组件获取数据源

    对于ajaxform组件var record = ajaxform.getRecord();var storeId = record.get("storeId");var stor ...