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. R_针对churn数据用id3、cart、C4.5和C5.0创建决策树模型进行判断哪种模型更合适

    data(churn)导入自带的训练集churnTrain和测试集churnTest 用id3.cart.C4.5和C5.0创建决策树模型,并用交叉矩阵评估模型,针对churn数据,哪种模型更合适 决 ...

  2. Vue之vue中的data为什么是一个函数+vue中路径别名alias设置

    问题描述 为什么在vue组件中,我们的data属性必须是一个函数,new Vue()中的data除外,因为new Vue中只有一个data属性. 原因 因为我们能抽离出来的组件,肯定是具有复用性的,它 ...

  3. 11、kubernetes之dashboard

    一.准备dashboard使用的证书 # cd /etc/kubernetes/pki/ pki]# (umask 077; openssl genrsa -out dashboard.key 204 ...

  4. spark MLlib 概念 2:Stratified sampling 层次抽样

    定义: In statistical surveys, when subpopulations within an overall population vary, it is advantageou ...

  5. Servlet基础总结

    1.Servlet概念: Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...

  6. yum源相关

    yum软件仓库默认配置文件/etc/yum.conf,此文件定义了yum在线下载的rpm包存放位置及下载后是否保存. [root@localhost ~]# head /etc/yum.conf[ma ...

  7. windows怎么远程访问deepin linux桌面

    deepin linux端安装anydesk 1.首先点击打开任务栏上的“深度商店” 2.打开后搜索anydesk. 3.点击进入后按“安装”即可,安装完成即可在“深度商店”点击“打开”运行anyde ...

  8. Python_基础知识储备

    目录 目录 前言 初识Python 解析型与编译型 OOP与POP 相关概念1 Python的解释器 Python程序设计的思想 Python的编程风格 最后 前言 前面的博文从记录了如何Setup ...

  9. 阶段3 2.Spring_01.Spring框架简介_06.spring的体系结构

    资料内提供了spring 的开发包 docs:文档 libs:jar包 schema:约束

  10. 微信小程序的配置详解

    1.配置详解: 使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. 1>pages 接受一个数组,每一项都是字符串,来指定小 ...