php 数组助手类
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 数组助手类的更多相关文章
- Yii2 数组助手类arrayHelper
数组助手类 ArrayHelper 1.什么是数组助手类 Yii 数组助手类提供了额外的静态方法,让你更高效的处理数组. a.获取值(getValue) class User { public $na ...
- Yii的数组助手类
获取值 用原生PHP从一个对象.数组.或者包含这两者的一个复杂数据结构中获取数据是非常繁琐的. 你首先得使用isset 检查 key 是否存在, 然后如果存在你就获取它,如果不存在, 则提供一个默认返 ...
- ADO.NET数据库操作助手类
SQL语句操作增删查改助手类 using System; using System.Collections.Generic; using System.Configuration; using Sys ...
- Java学习笔记七——数组工具类Arrays
数组工具类Arrays Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组.若将里面的方法用熟的话,那开发效率会大大提高.下面介绍其中的方法. List<T> ...
- 【C#】SQL数据库助手类2.0(自用)
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- 数组工具类 - ArrayUtil.java
数组工具类,提供数组.对象之间转换的方法. 源码如下:(点击下载 - ArrayUtil.java .commons-lang-2.6.jar) import java.lang.reflect.Ar ...
- java数组 数组工具类Arrays
一.数组 1.java有严格的数据类型限制,一个数组只能声明一个数据类型,存放同一种数据类型. 2.虽然只能存放一种数据类型,假设A , 如果数据类型B 继承A,依然能存放进入数组. 3.数组的初始化 ...
- java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象
1. java.util.Arrays 数组工具类 Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...
- AES加密解密 助手类 CBC加密模式
"; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...
随机推荐
- matplotlib中plt.scatter()参数详解
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, l ...
- ZeroMQ+QT 字符串收发
结合 Zeromq API函数 与 Qt 字符串QString QByteArray 实现字串收发: 发送端: zmq_msg_t msg; QString strT = “ABC汉字123”: QB ...
- Spark-PySpark sql各种内置函数
_functions = { 'lit': 'Creates a :class:`Column` of literal value.', 'col': 'Returns a :class:`Colum ...
- CodeForces 538F A Heap of Heaps
题意 给定一个长度为n的数组A,将它变为一颗k叉树(1 <= k <= n - 1)(堆的形式编号). 问对于每一个k,有多少个节点小于它的父节点. 解题 显然,最初的想法是暴力.因为树的 ...
- [pytorch笔记] 调整网络学习率
1. 为网络的不同部分指定不同的学习率 class LeNet(t.nn.Module): def __init__(self): super(LeNet, self).__init__() self ...
- git远程相关
git remote add origin git仓库地址 // 添加了远程仓库 git remote remove origin // 移除远程仓库 git push -u origin maste ...
- 使用Hive-JDBC遇到的一些问题解决
使用Hive-JDBC遇到的一些问题解决(转) 标签(空格分隔): Hive 1,java.lang.NoClassDefFoundError: org/apache/hive/service/cli ...
- c++ STL -- set和multiset
set和multiset 1.结构 set和multiset会根据特定的排序原则将元素排序.两者不同之处在于,multisets允许元素重复,而set不允许重复. 只要是assignable.copy ...
- vue问题二:vue打包时产生的问题
vue项目打包问题:vue中默认的config/index.js的配置的详细理解: 参考文档:https://blog.csdn.net/qq_34611721/article/details/809 ...
- 使用bloomfilter
package bloom; /** * 项目名:SpiderCrawler * 文件名:BloomFilterTest.java * 作者:zhouyh * 时间:2014-8-29 下午02:54 ...