309 lines
8.1 KiB
PHP
309 lines
8.1 KiB
PHP
|
<?php
|
||
|
/* file: 数组处理类
|
||
|
Created by wanghong<1204772286@qq.com>
|
||
|
Date: 2021-02-23 */
|
||
|
|
||
|
namespace utils;
|
||
|
|
||
|
class Arr{
|
||
|
|
||
|
/**
|
||
|
* 节点遍历
|
||
|
* @param array $list 遍历的数组
|
||
|
* @param string $pk 主键id
|
||
|
* @param string $pid 父id
|
||
|
* @param string $child 子数组
|
||
|
* @param int $root 判断是否存在parent
|
||
|
* @return array
|
||
|
**/
|
||
|
public static function listToTree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0)
|
||
|
{
|
||
|
// 创建Tree
|
||
|
$tree = [];
|
||
|
if (is_array($list)) {
|
||
|
// 创建基于主键的数组引用
|
||
|
$refer = [];
|
||
|
foreach ($list as $key => $data) {
|
||
|
$refer[$data[$pk]] =& $list[$key];
|
||
|
}
|
||
|
foreach ($list as $key => $data) {
|
||
|
// 判断是否存在parent
|
||
|
$parentId = $data[$pid];
|
||
|
if ($root == $parentId) {
|
||
|
$tree[] =& $list[$key];
|
||
|
} else {
|
||
|
if (isset($refer[$parentId])) {
|
||
|
$parent =& $refer[$parentId];
|
||
|
$parent[$child][] =& $list[$key];
|
||
|
}else {
|
||
|
$tree[] =& $list[$key];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return $tree;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 删除重复的二维数组
|
||
|
* $array 需要操作的数组
|
||
|
* $field 根据字段进行对比
|
||
|
* return array
|
||
|
*/
|
||
|
public static function remove_duplicate($array, $field)
|
||
|
{
|
||
|
$result = array();
|
||
|
foreach ($array as $key => $value) {
|
||
|
$has = false;
|
||
|
foreach ($result as $val) {
|
||
|
if ($val[$field] == $value[$field]) {
|
||
|
$has = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (!$has) {
|
||
|
$result[] = $value;
|
||
|
}
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 二维数组取最大值
|
||
|
* $array 操作的数组
|
||
|
* $field 取某个字段的最大值
|
||
|
* $returnArr 返回最大的值(默认)或者最大值所在的数组
|
||
|
*/
|
||
|
public static function get_array_max($array, $field, $returnArr = false)
|
||
|
{
|
||
|
if(!$array){
|
||
|
return 0;
|
||
|
}
|
||
|
foreach ($array as $k => $v) {
|
||
|
$temp[] = $v[$field];
|
||
|
}
|
||
|
if ($returnArr) {
|
||
|
$max = max($temp);
|
||
|
foreach ($array as $k => $v) {
|
||
|
if ($v[$field] == $max) {
|
||
|
return $v;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
return max($temp);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
* 二维数组排序
|
||
|
* $arrays 需要排序的数组
|
||
|
* $sort_key 需要排序的字段
|
||
|
* $sort_order 正序(默认)还是倒序
|
||
|
* $sort_type 排序的类型:数字(默认),字母
|
||
|
* return $array
|
||
|
*/
|
||
|
public static function sort_array($arrays, $sort_key, $sort_order = SORT_ASC, $sort_type = SORT_NUMERIC){
|
||
|
if (is_array($arrays)) {
|
||
|
foreach ($arrays as $array) {
|
||
|
if (is_array($array)) {
|
||
|
$key_arrays[] = $array[$sort_key];
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
array_multisort($key_arrays, $sort_order, $sort_type, $arrays);
|
||
|
return $arrays;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* 查询二维数组中是否含有此值
|
||
|
* $value 所需的值
|
||
|
* $array 操作的数组
|
||
|
* return boolean
|
||
|
*/
|
||
|
public static function deep_in_array($value, $array)
|
||
|
{
|
||
|
foreach ($array as $item) {
|
||
|
if (!is_array($item)) {
|
||
|
if ($item == $value) {
|
||
|
return true;
|
||
|
} else {
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
if (in_array($value, $item)) {
|
||
|
return true;
|
||
|
} else if (deep_in_array($value, $item)) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 将相同值的二维数组重组一个新的三维数组
|
||
|
* $field 需要放到一个数组的字段
|
||
|
* $title 作为新数组的标题
|
||
|
* $array 需要处理的数组
|
||
|
* */
|
||
|
//将相同值的二维数组重组一个新的数组。
|
||
|
public static function recombine_array($field,$title,$array,$name='name',$list='dataList'){
|
||
|
$data=[];
|
||
|
foreach ($array as $k => $v) {
|
||
|
$arr[]=$v[$field];
|
||
|
$arr=array_unique($arr);
|
||
|
$num=0;
|
||
|
foreach($arr as $key=>$val){
|
||
|
if($v[$field]==$val){
|
||
|
$data[$num][$name] = $v[$title];
|
||
|
$data[$num][$list][] = $v;
|
||
|
}
|
||
|
++$num;
|
||
|
}
|
||
|
}
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
将object转array
|
||
|
$array 要转化的对象
|
||
|
return array
|
||
|
*/
|
||
|
public static function object_array($array)
|
||
|
{
|
||
|
if (is_object($array)) {
|
||
|
$array = (array)$array;
|
||
|
}
|
||
|
if (is_array($array)) {
|
||
|
foreach ($array as $key => $value) {
|
||
|
$array[$key] = object_array($value);
|
||
|
}
|
||
|
}
|
||
|
return $array;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
json转array
|
||
|
$json 要转化的json串
|
||
|
return array
|
||
|
*/
|
||
|
public static function json_to_array($json)
|
||
|
{
|
||
|
$array = json_decode($json);
|
||
|
$arr = [];
|
||
|
if ($array) {
|
||
|
foreach ($array as $k => $v) {
|
||
|
$arr[] = object_array($v);
|
||
|
}
|
||
|
}
|
||
|
return $arr;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
数组中查找相应的值,只要出现一次即返回,否则返回false;
|
||
|
$array 被查找的数组
|
||
|
$name 要查找的字段
|
||
|
$condition 匹配条件
|
||
|
return array
|
||
|
*/
|
||
|
public static function query_array($array, $name, $condition,$key='')
|
||
|
{
|
||
|
if (!is_array($array)) {
|
||
|
return false;
|
||
|
}
|
||
|
foreach ($array as $item) {
|
||
|
if ($item[$name] == $condition) {
|
||
|
if($key){
|
||
|
return $item[$key];
|
||
|
}
|
||
|
return $item;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
在数组中查找相应的值,将查找到的结果集全部返回,如果没有找到,则返回false.
|
||
|
$array 查找的数组
|
||
|
$name 查找的字段
|
||
|
$condition 匹配条件
|
||
|
return array
|
||
|
*/
|
||
|
public static function query_array_all($array, $name, $condition)
|
||
|
{
|
||
|
if (!is_array($array)) {
|
||
|
return false;
|
||
|
}
|
||
|
$returnArray = array();
|
||
|
foreach ($array as $item) {
|
||
|
if ($item[$name] == $condition) {
|
||
|
$returnArray[] = $item;
|
||
|
}
|
||
|
}
|
||
|
if (count($returnArray) > 0) {
|
||
|
return $returnArray;
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
获取两个数字之间的值,形成一个新的数组
|
||
|
$from 起始值
|
||
|
$to 终止值
|
||
|
$step -int 步长
|
||
|
$str -string 数字结尾处拼接的字符串
|
||
|
return array
|
||
|
*/
|
||
|
public static function array_range($from, $to, $step=1,$str=''){
|
||
|
$array = array();
|
||
|
for ($x=$from; $x <= $to; $x += $step){
|
||
|
$array[] = $x.$str;
|
||
|
}
|
||
|
return $array;
|
||
|
}
|
||
|
|
||
|
//数组中获取ID字符串
|
||
|
public static function arrayToString($array, $field, $isStr = true)
|
||
|
{
|
||
|
$idArr = [];
|
||
|
foreach ($array as $k => $v) {
|
||
|
if(is_array($field)){
|
||
|
foreach($field as $val){
|
||
|
$idArr[]=$v[$val];
|
||
|
}
|
||
|
}else{
|
||
|
$idArr[] = $v[$field];
|
||
|
}
|
||
|
}
|
||
|
if ($isStr) {
|
||
|
$idStr = implode(',', $idArr);
|
||
|
return $idStr;
|
||
|
} else {
|
||
|
return $idArr;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 用数组中某个字段的值 作为数组的键
|
||
|
* @param array $arr 需要处理的数组
|
||
|
* @param string $keyValue 作为键的值
|
||
|
* @return array
|
||
|
*/
|
||
|
public static function array_value_key($arr, $keyValue)
|
||
|
{
|
||
|
$temp = [];
|
||
|
foreach ($arr as $item) {
|
||
|
if (isset($item[$keyValue])){
|
||
|
$temp[$item[$keyValue]] = $item;
|
||
|
}
|
||
|
}
|
||
|
return $temp;
|
||
|
}
|
||
|
|
||
|
}
|