ArrayHelper.php


  1. <?php
  2. /**
  3. * php 数组助手类
  4. * Class ArrayHelper
  5. * @package app\helper
  6. */
  7. class ArrayHelper {
  8. /**
  9. * @brief get_ids_arr 取得某个二维数组里的id集合
  10. *-----------------------------------------------
  11. * $arr = array(
  12. * array('line_id' => 1, 'title' => '标题1',),
  13. * array('line_id' => 2, 'title' => '标题2',),
  14. * );
  15. * $line_ids = $this->share->get_ids_arr($arr);
  16. *-----得到--------------------------------------
  17. * $line_ids = array(1, 2);
  18. *-----------------------------------------------
  19. * @Param $arr 原始数组
  20. * @Param $field 需要的字段:如 id, line_id, cid...
  21. * @Param $zero 是否增加一个元素0,防止空数组导致where_in('id', $ids)出错
  22. *
  23. * @Returns Array
  24. */
  25. public static function get_ids_arr($arr = array(array('id'=>1, 'other'=>''),), $field = 'id', $zero = false){
  26. $new_arr = array();
  27. foreach ($arr as $ak=>$av) {
  28. if (!array_key_exists($field, $av)) {
  29. break; //非法数组
  30. }
  31. $new_arr[] = $av[$field];
  32. }
  33. if (empty($new_arr) && $zero) {
  34. $new_arr[] = 0;
  35. }
  36. return $new_arr ? array_unique($new_arr) : $new_arr;
  37. } /**
  38. * @brief reform_arr 重组数组
  39. * --------------------------------------------
  40. * $arr = array(
  41. * array('line_id' => 11, 'title' => '标题1',),
  42. * array('line_id' => 22, 'title' => '标题2',),
  43. * );
  44. * $new_arr = $this->share->reform_arr($arr);
  45. * ----得到------------------------------------
  46. * array(
  47. * 11=>array('line_id' => 11, 'title' => '标题1',),
  48. * 22=>array('line_id' => 22, 'title' => '标题2',),
  49. * );
  50. * --------------------------------------------
  51. * @Param $arr
  52. * @Param $field
  53. *
  54. * @Returns Array
  55. */
  56. public static function reform_arr($arr = array(array('id'=>1, 'other'=>''),), $field = 'id'){
  57. $new_arr = array();
  58. if (!is_array($arr)) {
  59. return $new_arr;
  60. }
  61. foreach ($arr as $av) {
  62. if (!is_array($av)) {
  63. break;
  64. }
  65. if (!array_key_exists($field, $av)) {
  66. break;
  67. }
  68. if (!isset($new_arr[$av[$field]])) {
  69. $new_arr[$av[$field]] = $av;
  70. }
  71. }
  72. return $new_arr;
  73. }
  74. /**
  75. * Builds a map (key-value pairs) from a multidimensional array or an array of objects.
  76. * The `$from` and `$to` parameters specify the key names or property names to set up the map.
  77. * Optionally, one can further group the map according to a grouping field `$group`.
  78. *
  79. * For example,
  80. *
  81. * ~~~
  82. * $array = [
  83. * ['id' => '123', 'name' => 'aaa', 'class' => 'x'],
  84. * ['id' => '124', 'name' => 'bbb', 'class' => 'x'],
  85. * ['id' => '345', 'name' => 'ccc', 'class' => 'y'],
  86. * ];
  87. *
  88. * $result = ArrayHelper::map($array, 'id', 'name');
  89. * // the result is:
  90. * // [
  91. * // '123' => 'aaa',
  92. * // '124' => 'bbb',
  93. * // '345' => 'ccc',
  94. * // ]
  95. *
  96. * $result = ArrayHelper::map($array, 'id', 'name', 'class');
  97. * // the result is:
  98. * // [
  99. * // 'x' => [
  100. * // '123' => 'aaa',
  101. * // '124' => 'bbb',
  102. * // ],
  103. * // 'y' => [
  104. * // '345' => 'ccc',
  105. * // ],
  106. * // ]
  107. * ~~~
  108. *
  109. * @param array $array
  110. * @param string|\Closure $from
  111. * @param string|\Closure $to
  112. * @param string|\Closure $group
  113. * @return array
  114. */
  115. public static function map($array, $from, $to, $group = null)
  116. {
  117. if(!is_array($array)){
  118. return array();
  119. }
  120. $result = [];
  121. foreach ($array as $element) {
  122. if(!array_key_exists($from,$element) OR !array_key_exists($to,$element))
  123. {
  124. continue;
  125. }
  126. $key = $element[$from];
  127. $value = $element[$to];
  128. if ($group !== null) {
  129. if(!array_key_exists($group,$element))
  130. {
  131. continue;
  132. }
  133. $result[$element[$group]][$key] = $value;
  134. } else {
  135. $result[$key] = $value;
  136. }
  137. }
  138. return $result;
  139. } /**
  140. * @brief get_ids_str 取得某个二维数组里的id集合,组成字符串
  141. *-----------------------------------------------
  142. * Array
  143. (
  144. [0] => Array
  145. (
  146. [id] => 9613
  147. [total] => 4
  148. )
  149. [1] => Array
  150. (
  151. [id] => 1234
  152. [total] => 5
  153. )
  154. )
  155. * $line_ids = $this->share->get_ids_str($arr);
  156. *-----得到--------------------------------------
  157. * $line_ids = 9613,1234;
  158. *-----------------------------------------------
  159. * @Param $arr 原始数组
  160. * @Param $field 需要的字段:如 id, line_id, cid...
  161. * @Param $zero 是否增加一个元素0,防止空数组导致WHERE id IN('')出错
  162. *
  163. * @Returns string
  164. */
  165. public static function get_ids_str($arr = array(array('id'=>1, 'other'=>''),), $field = 'id', $zero = false){
  166. return join(',', self::get_ids_arr($arr, $field));
  167. }
  168. /**
  169. * @brief array_pop_ele_byval 根据指定值剔除数组中的元素
  170. * ---------------------------------------------
  171. * Example
  172. * $arr = array('a'=>'hello', 'b'=>'abc', 'c'=>'hello');
  173. * $arr = $this->share->array_pop_ele_byval($arr, 'hello');
  174. * print_r($arr);exit;
  175. * --------------------------------------------
  176. * @Param $arr
  177. * @Param $val
  178. *
  179. * @Returns Array
  180. */
  181. public static function array_pop_ele_byval($arr, $val = ''){
  182. if (!is_array($arr)) {
  183. return false;
  184. }
  185. foreach ($arr as $ak=>$av) {
  186. if ($av == $val) {
  187. unset($arr[$ak]);
  188. }
  189. }
  190. return $arr;
  191. } /**
  192. * @brief array_pop_ele_bykey 根据指定指定下标剔除元素
  193. * ---------------------------------------------
  194. * Example
  195. * $arr = array('a'=>'hello', 'b'=>'abc', 'c'=>'hello');
  196. * $arr = $this->share->array_pop_ele_bykey($arr, 'a');
  197. * print_r($arr);exit;
  198. * --------------------------------------------
  199. * @Param $arr
  200. * @Param $key
  201. *
  202. * @Returns Array
  203. */
  204. public static function array_pop_ele_bykey($arr, $key=''){
  205. if (!is_array($arr)) {
  206. return false;
  207. }
  208. foreach ($arr as $ak=>$av) {
  209. if ($ak == $key) {
  210. unset($arr[$ak]);
  211. }
  212. }
  213. return $arr;
  214. } /**
  215. * @brief array2sort 二维数组 根据指定下标 排序(冒泡) 保持索引关系
  216. * --------------------------------------------------------------------
  217. * $arr = array(
  218. * 'a'=>array( 'key1'=>3, 'key2'=>50,),
  219. * 'b'=>array( 'key1'=>79, 'key2'=>30,),
  220. * 'c'=>array( 'key1'=>8, 'key2'=>40,),
  221. * 'd'=>array( 'key1'=>55, 'key2'=>20,),
  222. * 11=>array( 'key1'=>2, 'key2'=>300,),
  223. * );
  224. * $arr = array2sort($arr, 'key2', 'a');print_r($arr);
  225. *--------------------------------------------------------------------
  226. * @Param $arr 待排序数组,(既可以是索引数组,也可以是关系型数组)
  227. * @Param $key 要排序的下标
  228. * @Param $sort d-降序 a-升序
  229. *
  230. * @Returns Array
  231. */
  232. public function array2sort($arr, $key='', $sort = 'd'){
  233. $n = count($arr);
  234. $tmp = array();
  235. if (empty($arr) || empty($key) || !in_array($sort, array('d', 'a'))) {
  236. return $arr;
  237. }
  238. foreach ($arr as $ak=>$av) { //为保持索引关系,将Key压入数组最后一个元素值保存
  239. array_push($arr[$ak], $ak);
  240. }
  241. $arr = array_values($arr);
  242. for ($i = 0; $i < $n; $i++) {
  243. for ($j = $n-1; $j > $i; $j--) {
  244. //降序排列
  245. if ($sort == 'd') {
  246. if (isset($arr[$i][$key]) && $arr[$i][$key] < $arr[$j][$key]) {
  247. $tmp = $arr[$i];
  248. $arr[$i] = $arr[$j];
  249. $arr[$j] = $tmp;
  250. }
  251. //升序排列
  252. } else {
  253. if (isset($arr[$i][$key]) && $arr[$i][$key] > $arr[$j][$key]) {
  254. $tmp = $arr[$j];
  255. $arr[$j] = $arr[$i];
  256. $arr[$i] = $tmp;
  257. }
  258. }
  259. }
  260. }
  261. $new_arr = array();
  262. foreach ($arr as $ak=>$av) { //为保持索引关系,将最右一个元素值key,拿出来放到下标里
  263. $tmp_key = array_pop($arr[$ak]);
  264. $new_arr[$tmp_key] = $arr[$ak];
  265. }
  266. return $new_arr;
  267. }
  268. }

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. matplotlib中plt.scatter()参数详解

    scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, l ...

  2. ZeroMQ+QT 字符串收发

    结合 Zeromq API函数 与 Qt 字符串QString QByteArray 实现字串收发: 发送端: zmq_msg_t msg; QString strT = “ABC汉字123”: QB ...

  3. Spark-PySpark sql各种内置函数

    _functions = { 'lit': 'Creates a :class:`Column` of literal value.', 'col': 'Returns a :class:`Colum ...

  4. CodeForces 538F A Heap of Heaps

    题意 给定一个长度为n的数组A,将它变为一颗k叉树(1 <= k <= n - 1)(堆的形式编号). 问对于每一个k,有多少个节点小于它的父节点. 解题 显然,最初的想法是暴力.因为树的 ...

  5. [pytorch笔记] 调整网络学习率

    1. 为网络的不同部分指定不同的学习率 class LeNet(t.nn.Module): def __init__(self): super(LeNet, self).__init__() self ...

  6. git远程相关

    git remote add origin git仓库地址 // 添加了远程仓库 git remote remove origin // 移除远程仓库 git push -u origin maste ...

  7. 使用Hive-JDBC遇到的一些问题解决

    使用Hive-JDBC遇到的一些问题解决(转) 标签(空格分隔): Hive 1,java.lang.NoClassDefFoundError: org/apache/hive/service/cli ...

  8. c++ STL -- set和multiset

    set和multiset 1.结构 set和multiset会根据特定的排序原则将元素排序.两者不同之处在于,multisets允许元素重复,而set不允许重复. 只要是assignable.copy ...

  9. vue问题二:vue打包时产生的问题

    vue项目打包问题:vue中默认的config/index.js的配置的详细理解: 参考文档:https://blog.csdn.net/qq_34611721/article/details/809 ...

  10. 使用bloomfilter

    package bloom; /** * 项目名:SpiderCrawler * 文件名:BloomFilterTest.java * 作者:zhouyh * 时间:2014-8-29 下午02:54 ...