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. 如何在matalb图像上添加公式符号

    方法: legend({'$\sigma(t)$'},'interpreter','latex') 效果如下:

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

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

  3. ArrayList类源码浅析(三)

    1.看一个示例 运行上述代码,抛出一个异常: 这是一个典型的并发修改异常,如果把上述代码中的125行注释,把126行打开,运行就能通过了: 原因: 1)因为在迭代的时候,使用的是Itr类的对象,在调用 ...

  4. MQTT协议 Websocket JS客户端

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

  5. nginx-location正则表达式匹配规则及动静分离

    nginx-location正则表达式匹配规则及动静分离  发表于 2018年03月5日 |  分类于 nginx|  0 nginx,location常用正则表达式,及nginx动静分离 nginx ...

  6. 浏览器端-W3School-HTML:HTML DOM Object 对象

    ylbtech-浏览器端-W3School-HTML:HTML DOM Object 对象 1.返回顶部 1. HTML DOM Object 对象 Object 对象 Object 对象代表 HTM ...

  7. Other | 十招教你找到海量PPT模板

    转载自:https://www.douban.com/note/330962457/ 问:PPT模板是什么含义? 答: 先假定你们要的是这种网上到处泛滥成灾的主题PPT吧,下面请耐心看到最后,秋叶老师 ...

  8. ColorPicker 颜色选择器

    用于颜色选择,支持多种格式. 基础用法 使用 v-model 与 Vue 实例中的一个变量进行双向绑定,绑定的变量需要是字符串类型. <div class="block"&g ...

  9. Jmeter(五)检查点

    录制的脚本回放成功了, 但是运行有可能出现失败的情况, 所以有必要让JMeter来帮我们验证测试结果的正确性. 在Jmeter中是用断言组件来实现此功能的. 首先, 在需要添加断言的请求后面, 添加响 ...

  10. jquery的then方法

    绿地项目中的代码: $.ajax({ url: `https://openapi.italent.cn/OAuth/Token`, type: 'post', data: `tenant_id=${t ...