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;
}
}
?>
