开发者社区> 航空母舰> 正文

php数组工具类

简介:
+关注继续查看
数组《=》对象
Java代码  收藏代码
  1. /* 
  2.  * 数组转换成对象 
  3. $array = array('name' => 'one', 
  4.     'sex' => 'two', 
  5.     'test' => array('a' => 'ss', 'dd'), 
  6.     'old' => 'three' 
  7. ); 
  8. $arrayobject = array2Object($array); 
  9. echo $arrayobject->name;  // one 
  10. print_r(object2Array($arrayobject)); 
  11.  */  
  12. function array2Object($array) {  
  13.     if (!is_array($array)) return $array;  
  14.   
  15.     $object = new stdClass();  
  16.     if (is_array($array) && count($array) > 0) {  
  17.         foreach ($array as $name => $value) {  
  18.             $name = strtolower(trim($name));  
  19.             if ($name) $object->$name = array2Object($value);  
  20.         }  
  21.   
  22.         return $object;  
  23.     } else return FALSE;  
  24. }  
  25.   
  26. /* 
  27.  * 对象转换成数组 
  28.  */  
  29. function object2Array($objParam) {  
  30.     $obj_param = ( array )$objParam;  
  31.     foreach ($obj_param as $key => $value) {  
  32.         if (is_object($value)) {  
  33.             object2Array($value);  
  34.             $obj_param [$key] = ( array )$value;  
  35.         }  
  36.     }  
  37.     return $obj_param;  
  38. }  
数组《=》字符串
Java代码  收藏代码
  1. /** 
  2.  * 将字符串转换为数组 
  3.  * 
  4.  * @param    string    $data    字符串 
  5.  * @return    array    返回数组格式,如果,data为空,则返回空数组 
  6.  */  
  7. function string2array($data) {  
  8.     $array = array();  
  9.     if ($data == ''return $array;  
  10.     eval("\$array = $data;");  
  11.     return $array;  
  12. }  
  13.   
  14. /** 
  15.  * 返回经stripslashes处理过的字符串或数组 
  16.  * @param $string 需要处理的字符串或数组 
  17.  * @return mixed 
  18.  */  
  19. function new_stripslashes($string) {  
  20.     if (!is_array($string)) return stripslashes($string);  
  21.     foreach ($string as $key => $val) $string[$key] = new_stripslashes($val);  
  22.     return $string;  
  23. }  
  24.   
  25. /** 
  26.  * 将数组转换为字符串 
  27.  *  数组入库比序列化函数直观 
  28.  * @param    array    $data        数组 
  29.  * @param    bool    $isformdata    如果为0,则不使用new_stripslashes处理,可选参数,默认为1 
  30.  * @return    string    返回字符串,如果,data为空,则返回空 
  31.  */  
  32. function array2string($data, $isformdata = 1) {  
  33.     if ($data == ''return '';  
  34.     if ($isformdata) $data = new_stripslashes($data);  
  35.     return addslashes(var_export($data, TRUE));  
  36. }  
数组《=》树
Java代码  收藏代码
  1. /** 
  2.  * 将一个平面的二维数组按照指定的字段转换为树状结构 
  3.  * 
  4.  * 当 $returnReferences 参数为 true 时,返回结果的 tree 字段为树,refs 字段则为节点引用。 
  5.  * 利用返回的节点引用,可以很方便的获取包含以任意节点为根的子树。 
  6.  * 
  7.  * @param array $arr 原始数据 
  8.  * @param string $fid 节点ID字段名 
  9.  * @param string $fparent 节点父ID字段名 
  10.  * @param string $fchildrens 保存子节点的字段名 
  11.  * @param boolean $returnReferences 是否在返回结果中包含节点引用 
  12.  * 
  13.  * return array 
  14.  */  
  15. function array_to_tree($arr, $fid, $fparent = 'parent_id',  
  16.                        $fchildrens = 'childrens', $returnReferences = false) {  
  17.     $pkvRefs = array();  
  18.     foreach ($arr as $offset => $row) {  
  19.         $pkvRefs[$row[$fid]] =& $arr[$offset];  
  20.     }  
  21.   
  22.     $tree = array();  
  23.     foreach ($arr as $offset => $row) {  
  24.         $parentId = $row[$fparent];  
  25.         if ($parentId) {  
  26.             if (!isset($pkvRefs[$parentId])) {  
  27.                 continue;  
  28.             }  
  29.             $parent =& $pkvRefs[$parentId];  
  30.             $parent[$fchildrens][] =& $arr[$offset];  
  31.         } else {  
  32.             $tree[] =& $arr[$offset];  
  33.         }  
  34.     }  
  35.     if ($returnReferences) {  
  36.         return array('tree' => $tree, 'refs' => $pkvRefs);  
  37.     } else {  
  38.         return $tree;  
  39.     }  
  40. }  
  41.   
  42. /** 
  43.  * 将树转换为平面的数组 
  44.  * 
  45.  * @param array $node 
  46.  * @param string $fchildrens 
  47.  * 
  48.  * @return array 
  49.  */  
  50. function tree_to_array(& $node, $fchildrens = 'childrens') {  
  51.     $ret = array();  
  52.     if (isset($node[$fchildrens]) && is_array($node[$fchildrens])) {  
  53.         foreach ($node[$fchildrens] as $child) {  
  54.             $ret = array_merge($ret, tree_to_array($child, $fchildrens));  
  55.         }  
  56.         unset($node[$fchildrens]);  
  57.         $ret[] = $node;  
  58.     } else {  
  59.         $ret[] = $node;  
  60.     }  
  61.     return $ret;  
  62. }  
 PHP二维数组去重复项函数
Java代码  收藏代码
  1. <?php  
  2. function unique_array_2d($array2D,$stkeep=false,$ndformat=true)  
  3. {  
  4.     // 判断是否保留一级数组键 (一级数组键可以为非数字)  
  5.     if($stkeep) $stArr = array_keys($array2D);  
  6.   
  7.     // 判断是否保留二级数组键 (所有二级数组键必须相同)  
  8.     if($ndformat) $ndArr = array_keys(end($array2D));  
  9.   
  10.     //降维,也可以用implode,将一维数组转换为用逗号连接的字符串  
  11.     foreach ($array2D as $v){  
  12.         $v = join(",",$v);   
  13.         $temp[] = $v;  
  14.     }  
  15.   
  16.     //去掉重复的字符串,也就是重复的一维数组  
  17.     $temp = array_unique($temp);   
  18.   
  19.     //再将拆开的数组重新组装  
  20.     foreach ($temp as $k => $v)  
  21.     {  
  22.         if($stkeep) $k = $stArr[$k];  
  23.         if($ndformat)  
  24.         {  
  25.             $tempArr = explode(",",$v);   
  26.             foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;  
  27.         }  
  28.         else $output[$k] = explode(",",$v);   
  29.     }  
  30.   
  31.     return $output;  
  32. }  
  33.   
  34. $array2D = array(  
  35.     'first'=>array('title'=>'1111','date'=>'2222'),  
  36.     'second'=>array('title'=>'1111','date'=>'2222'),  
  37.     'third'=>array('title'=>'2222','date'=>'3333')  
  38. );  
  39.   
  40. echo "<pre>";  
  41. print_r(unique_array_2d($array2D,true));  
  42.   
  43. /** 
  44. * 将二维数组通过指定的 key 去重 
  45. * 
  46. * @param array $arr 要去重的数组 
  47. * @param array $by  指定key去重,该参数不指定将返回 array() 
  48. * @return array 
  49. */  
  50. function array_multunique($arr,$by = array()) {  
  51.     $temp = array();  
  52.     foreach($arr as $key => $val) {  
  53.         foreach($by as $v) {  
  54.             $temp[$key] .= isset($val[$v]) ? $val[$v] : '';  
  55.         }  
  56.     }  
  57.     return array_intersect_key($arr,array_unique($temp));  
  58. }  
  59. /*$aa = array (   
  60.     array ('id' => 123, 'name' => '张三' ),    
  61.     array ('id' => 123, 'name' => '李四' ),    
  62.     array ('id' => 124, 'name' => '王五' ),    
  63.     array ('id' => 125, 'name' => '赵六' ),    
  64.     array ('id' => 126, 'name' => '赵六' )    
  65. );   
  66. $key = 'id';   
  67. array_multunique ($aa, array('id')); */  
  68.   
  69. function array_remove_key($array,$keys){  
  70.     if (!is_array($array) || !is_array($keys)){  
  71.         return false;  
  72.     }  
  73.     foreach($array as $t){  
  74.         foreach($keys as $k){  
  75.             unset($t[$k]);  
  76.         }  
  77.         $doc[]=$t;  
  78.     }  
  79.     return $doc;  
  80.   
  81. }  
  82. /*$array = array( 
  83.     '0' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee')), 
  84.     '1' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee')) 
  85. ); 
  86. print_r( array_remove_key($array,array('c')));*/  
  87.   
  88. function array_remove_key_val(&$a,$b,$c){  
  89.     foreach ($a as $key=>$value){  
  90.         if ( isset($value[$b]) && ($value[$b]==$c) ){  
  91.             unset($a[$key]);  
  92.         }  
  93.     }  
  94. }  
  95. /*$a=array( 
  96.     array('id'=>1,'num'=>10,'type'=>'news'), 
  97.     array('id'=>2,'num'=>100,'type'=>'pic') 
  98. ); 
  99. print_r( array_remove_key_val($a,"id","1") );*/  

数组<=>xml 相互转换http://hudeyong926.iteye.com/blog/836048

Java代码  收藏代码
  1. <?php  
  2. /** 
  3.  * 对数据进行编码转换 
  4.  * @param array/string $data       数组 
  5.  * @param string $input     需要转换的编码 
  6.  * @param string $output    转换后的编码 
  7.  */  
  8. function array_iconv($data, $input = 'gbk', $output = 'utf-8') {  
  9.     if (!is_array($data)) {  
  10.         return iconv($input, $output, $data);  
  11.     } else {  
  12.         foreach ($data as $key => $val) {  
  13.             if (is_array($val)) {  
  14.                 $data[$key] = array_iconv($val, $input, $output);  
  15.             } else {  
  16.                 $data[$key] = iconv($input, $output, $val);  
  17.             }  
  18.         }  
  19.         return $data;  
  20.     }  
  21. }  
  22. //在数组的第三个位置后添加1个元素,如何做$a = array("a" => 1, "b" => 2, "c" => 4, "d" => 6);$a = array_insert($a, "add", 3);  
  23. function array_insert($myarray, $value, $position) {  
  24.     $fore = array_splice($myarray, 0, $position);  
  25.     $fore[] = $value;  
  26.     $ret = array_merge($fore, $myarray);  
  27.     return $ret;  
  28. }  
  29. /** 
  30.  * 从数组中删除空白的元素(包括只有空白字符的元素) 
  31.  * 
  32.  * @param array $arr 
  33.  * @param boolean $trim 
  34.  */  
  35. function array_remove_empty(& $arr, $trim = true) {  
  36.     foreach ($arr as $key => $value) {  
  37.         if (is_array($value)) {  
  38.             array_remove_empty($arr[$key]);  
  39.         } else {  
  40.             $value = trim($value);  
  41.             if ($value == '') {  
  42.                 unset($arr[$key]);  
  43.             } elseif ($trim) {  
  44.                 $arr[$key] = $value;  
  45.             }  
  46.         }  
  47.     }  
  48. }  
  49.   
  50. /** 
  51.  * 将一个二维数组转换为 hashmap 
  52.  * 
  53.  * 如果省略 $valueField 参数,则转换结果每一项为包含该项所有数据的数组。 
  54.  * 
  55.  * @param array $arr 
  56.  * @param string $keyField 
  57.  * @param string $valueField 
  58.  * 
  59.  * @return array 
  60.  */  
  61. function array_to_hashmap(& $arr, $keyField, $valueField = null) {  
  62.     $ret = array();  
  63.     if ($valueField) {  
  64.         foreach ($arr as $row) {  
  65.             $ret[$row[$keyField]] = $row[$valueField];  
  66.         }  
  67.     } else {  
  68.         foreach ($arr as $row) {  
  69.             $ret[$row[$keyField]] = $row;  
  70.         }  
  71.     }  
  72.     return $ret;  
  73. }  
  74.   
  75. /** 
  76.  * 将一个二维数组按照指定字段的值分组 
  77.  * 
  78.  * @param array $arr 
  79.  * @param string $keyField 
  80.  * 
  81.  * @return array 
  82.  */  
  83. function array_group_by(& $arr, $keyField) {  
  84.     $ret = array();  
  85.     foreach ($arr as $row) {  
  86.         $key = $row[$keyField];  
  87.         $ret[$key][] = $row;  
  88.     }  
  89.     return $ret;  
  90. }  
  91.   
  92. /** 
  93.  * 根据指定的键值对数组排序 
  94.  * 
  95.  * @param array $array 要排序的数组 
  96.  * @param string $keyname 键值名称 
  97.  * @param int $sortDirection 排序方向 
  98.  * 
  99.  * @return array 
  100.  */  
  101. function array_column_sort($array, $keyname, $sortDirection = SORT_ASC) {  
  102.     return array_sortby_multifields($array, array($keyname => $sortDirection));  
  103. }  
  104.   
  105. /** 
  106.  * 将一个二维数组按照指定列进行排序,类似 SQL 语句中的 ORDER BY 
  107.  * 
  108.  * @param array $rowset 
  109.  * @param array $args 
  110.  */  
  111. function array_sortby_multifields($rowset, $args) {  
  112.     $sortArray = array();  
  113.     $sortRule = '';  
  114.     foreach ($args as $sortField => $sortDir) {  
  115.         foreach ($rowset as $offset => $row) {  
  116.             $sortArray[$sortField][$offset] = $row[$sortField];  
  117.         }  
  118.         $sortRule .= '$sortArray[\'' . $sortField . '\'], ' . $sortDir . ', ';  
  119.     }  
  120.     if (empty($sortArray) || empty($sortRule)) {  
  121.         return $rowset;  
  122.     }  
  123.     eval('array_multisort(' . $sortRule . '$rowset);');  
  124.     return $rowset;  
  125. }  
  126.   
  127. /* 
  128. description: 交换数组中两个元素的位置,元素包括key和value,具体用法见下面的例子 
  129. $arr = array (11 => 'a', 22 => 'b', 33 => 'c', 44 => 'd' ); 
  130. $res = array_exchange ( $arr, 11, 33 ); 
  131. */  
  132. function array_exchange($arr, $arg1, $arg2) {  
  133.     $r = range(0, count($arr) - 1);  
  134.     $res = $res_bak = array_combine($r, array_keys($arr));  
  135.     $change = array($arg1, $arg2);  
  136.     list ($res [array_search($change [0], $res_bak)], $res [array_search($change [1], $res_bak)]) = array($change [1], $change [0]);  
  137.     foreach ($res as $v) {  
  138.         $array [$v] = $arr [$v];  
  139.     }  
  140.     return $array;  
  141. }  
  142.   
  143. /* 
  144. 假设:给定一个大数组和一个字符串,要求在这个大数组中查找出比这个字符串大的5个元素。 
  145. 对于一个小数组(如:几十个元素以下的数组),可以采用循环的办法来一个一个进行比较,但是对于大数组来说,这个方法显然是不行,这需要找一个快速查找定位的解决办法。 
  146. $search = 'arr'; 
  147. $array = array ( 
  148.     'abs', 
  149.     'addslashes', 
  150.     'aggregate_info', 
  151.     'array_diff', 
  152.     'array_fill_keys', 
  153.     'array_fill', 
  154.     'array_filter', 
  155.     'base64_encode', 
  156.     'bccomp', 
  157. ); 
  158. $arrpos = array_pos($array,$search);   //定位 
  159. $arr = array_slice($array,$arrpos,5);  //取出数组 
  160. print_r($arr); 
  161.  
  162. 快速查找的结果: 
  163. Array 
  164. ( 
  165.     [0] => array_diff 
  166.     [1] => array_fill_keys 
  167.     [2] => array_fill 
  168.     [3] => array_filter 
  169.     [4] => base64_encode 
  170. ) 
  171. */  
  172. function array_pos($array, $search) {  
  173.     if (empty($array)) return false;  
  174.     if (!$search) return 0;  
  175.     sort($array);  
  176.     $array_turn = array_flip($array);  
  177.     if (isset($array_turn[$search])) {  
  178.         $arrpos = $array_turn[$search];  
  179.     } else {  
  180.         $tmp_arr = $array;  
  181.         $tmp_arr[] = $search;  
  182.         sort($tmp_arr);  
  183.         $tmp_arr_turn = array_flip($tmp_arr);  
  184.         $arrpos = $tmp_arr_turn[$search];  
  185.     }  
  186.     return $arrpos;  
  187. }  
  188.   
  189. //数组开头添加元素 保持原始key不变 arrayUnshift($arr, array('test'=>'4'))  
  190. function arrayUnshift($arrParams, $arrAdd) {  
  191.     $arr_keys = array();  
  192.     $arr_values = array();  
  193.     $arr_add_keys = array_keys($arrAdd);  
  194.     $arr_keys = array($arr_add_keys [0]);  
  195.     $arr_values = array($arrAdd [$arr_add_keys [0]]);  
  196.     foreach ($arrParams as $key => $value) {  
  197.         array_push($arr_keys, $key);  
  198.         array_push($arr_values, $value);  
  199.     }  
  200.     $arr_result = array_combine($arr_keys, $arr_values);  
  201.     return $arr_result;  
  202. }  
  203.   
  204. //获取多维数组下特定键下的值,并生成一维数组  
  205. function getKey2Array(array $arr, $key) {  
  206.     if (!trim($key)) return false;  
  207.     preg_match_all("/\"$key\";\w{1}:(?:\d+:|)(.*?);/", serialize($arr), $output);  
  208.     return $output[1];  
  209. }  
  210.   
  211. //多维数组转一维数组 $arr=array('123.html','456.html',array('dw.html','fl.html',array('ps.html','fw.html')),'ab.html');  
  212. function rebuild_array($arr) { //rebuild a array  
  213.     static $tmp = array();  
  214.   
  215.     for ($i = 0; $i < count($arr); $i++) {  
  216.         if (is_array($arr[$i])) {  
  217.             rebuild_array($arr[$i]);  
  218.         } else {  
  219.             $tmp[] = $arr[$i];  
  220.         }  
  221.     }  
  222.   
  223.     return $tmp;  
  224. }  
  225.   
  226. /** 
  227.  * 从一个二维数组中返回指定键的所有值 
  228.  * @param array $arr 
  229.  * @param string $col 
  230.  * @return array 
  231. */  
  232. function array_col_values(& $arr, $col)  
  233. {  
  234.     $ret = array();  
  235.     foreach ($arr as $row) {  
  236.         if (isset($row[$col])) {  
  237.             $ret[] = $row[$col];  
  238.         }  
  239.     }  
  240.     return $ret;  
  241. }  
  242. // 使用例子  
  243. $records = array(  
  244.     array(  
  245.         'id' => 2135,  
  246.         'first_name' => 'John',  
  247.         'last_name' => 'Doe'  
  248.     ),  
  249.     array(  
  250.         'id' => 3245,  
  251.         'first_name' => 'Sally',  
  252.         'last_name' => 'Smith'  
  253.     ),  
  254.     array(  
  255.         'id' => 5342,  
  256.         'first_name' => 'Jane',  
  257.         'last_name' => 'Jones'  
  258.     ),  
  259.     array(  
  260.         'id' => 5623,  
  261.         'first_name' => 'Peter',  
  262.         'last_name' => 'Doe'  
  263.     )  
  264. );  
  265. $firstNames = array_col_values($records, 'first_name');  
  266. print_r($firstNames);  
 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
快速搭建一套LAMP环境以及phpmyadmin数据库管理工具
使用云服务器ECS实例搭建LAMP平台,其中LAMP分别代表Linux、Apache、MySQL和PHP。phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。
60 0
PHP7 学习笔记(三)关于PHP7如何安装调试工具Xdebug扩展以及Zephir的问题
安装这个扩展是由于Zephir 编译不能始终通过,迫不得已啊,使用Zephir写扩展,总是出现以下错误: www@ubuntu1:~/phalcon-zephir/$ sudo zephir build Segmentation fault (core dumped) 去官方问问,由于php c...
1638 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
28325 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20290 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23541 0
+关注
514
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载