array new php,php array数组扩展类

/**

* 数组处理扩展

*/

class Ext_Array {

/**

* 数组递归处理, 用指定的方法递归的处理数组的每个元素, 多维数组也会处理

*

* @param array $array 待处理的数组

* @param string $fun 处理的方法名

* @return array 处理后的数组

*/

public static function map ($array, $fun) {

foreach ($array as $key =>$item) {

$array[$key] = is_array ($item) ? self::map ($item, $fun) : call_user_func($fun, $item);

}

return $array;

}

/**

* 重构数组, 用指的定的键值重新组成新的数组元素

*

* @param array $array 待处理的数组

* @param string $keyField 键值

* @param array/string $valueField 新数组包含的数据

* @return array 处理后的数组

*/

public static function format ($array, $keyField = null, $valueField = null) {

$newArray = array ();

foreach ($array as $key => $value) {

$index = !is_null ($keyField) ? $value[$keyField] : $key;

if (is_null ($valueField)) {

$newArray[$index] = $value;

}

elseif (is_array ($valueField)) {

reset ($valueField);

foreach ($valueField as $valueKey => $valueItem) {

$newArray[$index][$valueItem] = $value[$valueItem];

}

}

else {

$newArray[$index] = $value[$valueField];

}

}

return $newArray;

}

/**

* 随机抽取数组元素

*

* @param array $array 来源数组

* @return mixed 随机元素

*/

public static function rand($array) {

$index = array_rand ($array);

return $array[$index];

}

/**

* 随机抽取多维数组元素

*

* @param array $array 来源数组

* @param integer $count 抽取的纪录数

* @return mixed

*/

public static function randMulti($array, $count = 1) {

$count = min($count, count($array));

$index = array_rand ($array, $count);

if (is_array($index)) {

foreach ($index as $i) {

$ret[] = $array[$i];

}

}

else {

$ret = array($array[$index]);

}

return $ret;

}

/**

* 数组排序

*

* @param array $array 待排序的数组

* @param string $keyFields 依照排序的键名

* @param string $sortTypes 排序方式, asc: 升序, desc: 降序

* @return array 排序后的数组

*/

public static function sort ($array, $keyFields = 0, $sortTypes = 'asc') {

// $sortType —— 'asc': 升序 'desc': 降序

$valueArray = array ();

$newArray = array ();

$keyField = is_array ($keyFields) ? current ($keyFields) : $keyFields;

$sortType = is_array ($sortTypes) ? current ($sortTypes) : $sortTypes;

foreach ($array as $key => $item) {

$valueArray[$key] = $item[$keyField];

}

$sortFunc = strtolower ($sortType) == 'desc' ? 'arsort' : 'asort';

$sortFunc ($valueArray);

$lastItem = null;

$i = 0;

foreach ($valueArray as $key => $item) {

if (!is_null ($lastItem) && $array[$key][$keyField] != $lastItem[$keyField]) $i ++;

$newArray[$i][$key] = $array[$key];

$lastItem = $array[$key];

}

if (array_shift ($keyFields)) {

array_shift ($sortTypes);

foreach ($newArray as $key => $item) {

if (count ($item) > 1) {

$newArray[$key] = self::sort ($item, $keyFields, $sortTypes);

}

}

reset ($newArray);

}

$retArray = array ();

foreach ($newArray as $key => $item) {

foreach ($item as $sKey => $sItem) {

$retArray[$sKey] = $array[$sKey];

}

}

return $retArray;

}

/**

* 重置数组索引

*

* @param array $array 待处理的数组

* @return array 处理后的数组

*/

public static function reindex ($array) {

$newArray = array ();

foreach ($array as $key => $item) {

$newArray[] = $item;

}

return $newArray;

}

/**

* 连接数组并忽略空键值

*

* @param string $char 连接的字符

* @param array $array 连接的数组

* @return string 连接后的字符串

*/

public static function join ($char, $array) {

foreach ($array as $key => $item) {

if (strval ($item) == '') {

unset ($array[$key]);

}

}

$str = join ($char, $array);

return $str;

}

/**

* 过滤数组中不存在于某范围的键

*

* @param array $array 待过滤的数组

* @param array $arrayKeys 保留的键值

* @return array 过滤后的数组

*/

public static function filter ($array, $arrayKeys) {

foreach ($array as $key => $item) {

if (!in_array ($key, $arrayKeys)) {

unset ($array[$key]);

}

}

return $array;

}

/**

* 字符串或数组是否包含某个值

*

* @param string/array $array 待检查的字符串或者数组

* @param string $string 需要检查的字符串

* @param string $splitStr 分隔字符串的字符

* @return mixed

*/

public static function inArray ($array, $string, $splitStr = ',') {

if (!is_array ($array)) {

$array = explode ($splitStr, $array);

}

return (in_array ($string, $array));

}

/**

* 将二维数组中某一列构成一个新的数组

*

* @param array $array 来源数组

* @param string $keyField 键名

* @return array 新数组

*/

public static function cols ($array, $keyField) {

$array_cols = array ();

foreach ($array as $key => $item) {

$array_cols[] = $item[$keyField];

}

return $array_cols;

}

/**

* 序列转换数组

*

* @param string $strSerial 来源序列

* @param string $strSplitMain 序列一级分隔符

* @param string $strSplitSub 序列二级分隔符

* @return array

*/

public static function serialToArray ($strSerial, $strSplitMain = '|', $strSplitSub = ':') {

$arrResult = array ();

if ($strSerial) {

$arrRand = explode ($strSplitMain, $strSerial);

foreach ($arrRand as $key => $item) {

$arrItem = explode ($strSplitSub, $item);

$arrItem[0] = str_replace (array ("\n", "\r"), '', $arrItem[0]);

$arrResult[$arrItem[0]] = $arrItem[1];

}

}

return $arrResult;

}

/**

* 数组转换序列

*

* @param array $array 来源数组

* @param string $strSplitMain 序列一级分隔符

* @param string $strSplitSub 序列二级分隔符

* @return string

*/

public static function arrayToSerial ($array, $strSplitMain = '|', $strSplitSub = ':') {

foreach ($array as $key=>$item) {

$array[$key] = $key . $strSplitSub . $item;

}

$strSerial = join ($strSplitMain, $array);

return $strSerial;

}

/**

* 对象转化为数组

*

* @param object $obj 来源对象

* @return array

*/

public static function objectToArray($obj) {

if (is_object($obj)) {

$obj = (array) $obj;

}

if (is_array($obj)) {

$obj = Ext_Array::map($obj, 'Ext_Array::objectToArray');

}

return $obj;

}

/**

* 二维数组排序

*

* @param $arr:数据

* @param $keys:排序的健值

* @param $type:升序/降序

*

* @return array

*/

public static function multiArraySort($arr, $keys, $type = "asc") {

if (!is_array($arr)) {

return false;

}

$keysvalue = array();

foreach ($arr as $key => $val) {

$keysvalue[$key] = $val[$keys];

}

if ($type == "asc") {

asort($keysvalue);

}

else {

arsort($keysvalue);

}

reset($keysvalue);

foreach ($keysvalue as $key => $vals) {

$keysort[$key] = $key;

}

$new_array = array();

foreach ($keysort as $key => $val) {

$new_array[$key] = $arr[$val];

}

return $new_array;

}

/**

* 递归的去除数组中的空元素

*

* @param array $array 待处理的数组

* @return array

*/

public static function trimEmpty ($array) {

foreach ($array as $key=>$item) {

if (is_array ($item)) {

$array[$key] = self::trimEmpty($item);

}

elseif (!$item) {

unset ($array[$key]);

}

}

reset ($array);

return $array;

}

/**

@Summary 根据数组中概率值随机抽取key

@Param $array Array key => 概率 对应的数组

$mul Int default 1000 随机值倍数

@Return 随机key

*/

public static function randByProbability ($array, $mul = 1000) {

$max = array_sum ($array) * $mul;

$rand = round (mt_rand (0, $max));

$next = 0;

$last = 0;

foreach ($array as $key => $val) {

$val = $val * $mul;

$next += $val;

if ($rand >= $last && $rand <= $next) {

$res = $key;

break;

}

$last = $next;

}

return $res;

}

}

如果本文对您有所帮助,请支持下本站哦!!!^_^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值