php 基础类库-常用的数组操作静态类
由 admin 发表于 17:27<?php /** * 常用的数组操作静态类 * */ class cls_array_process { /** * 将规则二维数组(如数据库结果集)转换为指定key的值一维数组(降维处理) * * @param array $array 给定的原数组 * @param string $key 键名 * @return array/false 转化好的一维数组/给定数据不合法 * @example * $old_array = array( * array('id'=>1, 'name'=>'jack'), * array('id'=>2, 'name'=>'jim'), * ... * array('id'=>100, 'name'=>'james') * ); * array_to_simple($old_array, 'id') * $new_array = array(1,2,3,...,100) */ static public function array_to_simple($array, $key) { //数组规则性判断 if (!is_array($array) || empty($array) || !isset($key)) { return false; } $first_element = array_slice($array, 0, 1); if (!is_array($first_element[0]) || !isset($first_element[0][$key])) { return false; } //数组处理 $return = array(); foreach ($array as $k=>$v) { $return[$k] = $v[$key]; } return $return; } /** * 将二维数组转换为以指定key1值为键的数组 * (该数组的key1对应值都各自唯一) * * @param array $array 给定的二维数组 * @param string $key_k 键名 * @param string $key_v 键名(为空时,值为数组,不为空时,值为key2的值) * @return array 转化好的数组 * @example * $array = array( * array('id'=>10,'name'=>'aaa'), * array('id'=>21,'name'=>'bbb'), * array('id'=>32,'name'=>'ccc') * ); * array_to_hash($array, 'id'); * $hash_array = array( * '10'=>array('id'=>10,'name'=>'aaa'), * '21'=>array('id'=>21,'name'=>'bbb'), * '32'=>array('id'=>32,'name'=>'ccc') * ); * array_to_hash($array, 'id', 'name'); * $hash_array = array('10'=>'aaa', '21'=>'bbb', '32'=>'ccc'); */ static public function array_to_hash($array, $key_k, $key_v='') { //数组规则性判断 if (!is_array($array) || empty($key_k)) { return false; } $first_element = array_slice($array, 0, 1); if (!is_array($first_element[0]) || !isset($first_element[0][$key_k])) { return false; } //hash数组转化处理 $return = array(); if ($key_v === '') { foreach ($array as $k => $v) { $return[$v[$key_k]] = $v; } } else { foreach ($array as $k => $v) { $return[$v[$key_k]] = $v[$key_v]; } } return $return; } /** * 将数组指定key的元素值转化为逗号分割的串(一般用于id的转化) * * @param array $array 给定的二维数组 * @param string $key 键名 * @return array 转化好的数组 * @example * $array = array( * array('id'=>10,'name'=>'aaa'), * array('id'=>21,'name'=>'bbb'), * array('id'=>32,'name'=>'ccc') * ); * array_to_string($array, 'id'); * $string = "'10','21','32'"; */ static public function array_to_string($array, $key) { if (!isset($key) || !is_array($array)) { return false; } $new_array = self::array_to_simple($array, $key); if ($new_array === false) { return false; } $new_array = array_unique($new_array); if (count($new_array) > 0) { return "'".implode("','", $new_array)."'"; } else { return ""; } } /** * 数组截取 * * @param array $array 原数组 * @param integer $offset 起始位置 * @param integer $length 截取长度 * @param bool $preserve_key 是否保留原key(默认为true,不保留则为false) * @return array 截取后的数组 * @example * $array = array( * 0=>array('id'=>10,'name'=>'aaa'), * 1=>array('id'=>21,'name'=>'bbb'), * 2=>array('id'=>32,'name'=>'ccc') * ); * array_slice($array, 1, 2); * $result = array( * 1=>array('id'=>21,'name'=>'bbb'), * 2=>array('id'=>32,'name'=>'ccc') * ); */ static public function array_slice($array, $offset, $length, $preserve_key=true) { if (!is_array($array) || $offset < 0 || $length <= 0) return false; $array_length = count($array); if($offset >= $array_length) return false; if (($offset+$length) > $array_length) { $length = $array_length-$offset; } reset($array); $result = array(); if ($offset > 0) { for ($i=0;$i<$offset;$i++) { next($array); } } if($preserve_key) { for ($i=0;$i<$length;$i++) { $tmp = each($array); $result[$tmp['key']] = $tmp['value']; } } else { for ($i=0;$i<$length;$i++) { $tmp = each($array); $result[$i] = $tmp['value']; } } return $result; } /** * 规则二维数组(数据库结果数组)根据指定字段排序 * * @param array $array 规则的二维数组 * @param string $field_name 指定的排序字段 * @param integer $sort_flag 排序顺序标志(SORT_ASC 升序 | SORT_DESC 降序) * @param integer $sort_type 排序类型标志(SORT_NUMERIC 按数值比较 | SORT_STRING 按字符串比较 | SORT_REGULAR 按通常方法比较) * @return array|bool * @example * $array = array( * array('volume' => 85, 'edition' => 6), * array('volume' => 67, 'edition' => 2), * array('volume' => 98, 'edition' => 2) * ); * array_multisort($array, 'volume', SORT_ASC, SORT_NUMERIC); * $result = array( * array('volume' => 67, 'edition' => 2), * array('volume' => 85, 'edition' => 6), * array('volume' => 98, 'edition' => 2) * ); */ static public function array_multisort($array, $field_name, $sort_flag=SORT_ASC, $sort_type=SORT_NUMERIC) { if (!is_array($array) || empty($field_name)) { return false; } $sort_flag_array = array(SORT_ASC, SORT_DESC); $sort_type_array = array(SORT_NUMERIC, SORT_STRING, SORT_REGULAR); if(!in_array($sort_flag, $sort_flag_array) || !in_array($sort_type, $sort_type_array)) { return false; } $record = each($array); if(!is_array($record) || !isset($record['value'][$field_name])) { return false; } reset($array); $field_value = array(); foreach ($array as $key=>$value) { $field_value[$key] = $value[$field_name]; } array_multisort($field_value, $sort_flag, $sort_type, $array); return $array; } } ?>