php 基础类库-常用的数组操作静态类

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