You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
think-library/src/helper/Arrays.php

188 lines
4.8 KiB

2 years ago
<?php
// +----------------------------------------------------------------------
// | ThinkLibrary 6.0 for ThinkPhP 6.0
// +----------------------------------------------------------------------
// | 版权所有 2017~2020 [ https://www.dtapp.net ]
// +----------------------------------------------------------------------
// | 官方网站: https://gitee.com/liguangchun/ThinkLibrary
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// | gitee 仓库地址 https://gitee.com/liguangchun/ThinkLibrary
// | github 仓库地址 https://github.com/GC0202/ThinkLibrary
// | Packagist 地址 https://packagist.org/packages/liguangchun/think-library
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace DtApp\ThinkLibrary\helper;
/**
* 数组管理类
* @mixin Arrays
* @package DtApp\ThinkLibrary\helper
*/
class Arrays
{
/**
* 数组随机返回一个下标
* @param $array
* @return mixed
*/
public function rand(array $array)
{
return array_rand($array);
}
/**
* 数组随机返回一个值
* @param $array
* @return mixed
*/
public function randValue(array $array)
{
return $array[array_rand($array)];
}
/**
* 分隔数组
* @param array $array 数组
* @param int $num 数量
* @return array
*/
public function split(array $array, $num = 5): array
{
$arrRet = array();
if (!isset($array) || empty($array)) {
return $arrRet;
}
$iCount = count($array) / $num;
if (!is_int($iCount)) {
$iCount = ceil($iCount);
} else {
++$iCount;
}
for ($i = 0; $i < $iCount; ++$i) {
$arrInfos = array_slice($array, $i * $num, $num);
if (empty($arrInfos)) {
continue;
}
$arrRet[] = $arrInfos;
unset($arrInfos);
}
return $arrRet;
}
/**
* 多维数组去重
* @param array $array
* @return array
*/
public function unique(array $array): array
{
$out = array();
foreach ($array as $key => $value) {
if (!in_array($value, $out)) {
$out[$key] = $value;
}
}
$out = array_values($out);
return $out;
}
/**
* 二维数组根据某个键排序
* @param array $arrays
* @param string $sort_key
* @param int $sort_order
* @param int $sort_type
* @return array
*/
public function sort(array $arrays, string $sort_key, $sort_order = SORT_ASC, $sort_type = SORT_NUMERIC): array
{
$key_arrays = array();
if (is_array($arrays)) {
foreach ($arrays as $array) {
if (is_array($array)) {
$key_arrays[] = $array[$sort_key];
} else {
return [];
}
}
} else {
return [];
}
array_multisort($key_arrays, $sort_order, $sort_type, $arrays);
return $arrays;
}
/**
* 数组删除空格
* @param array $arr
* @return array
*/
public function trimArray(array $arr)
{
if (!is_array($arr)) {
return $arr;
}
foreach ($arr as $key => $value) {
if (is_array($value)) {
$arr[$key] = $this->TrimArray($value);
} else {
$arr[$key] = $this->trimAll($value);
}
}
return $arr;
}
/**
* 字符串删除空格
* @param $str
* @return string|string[]
*/
private function trimAll($str)
{
$oldchar = array(" ", " ", "\t", "\n", "\r");
$newchar = array("", "", "", "", "");
return str_replace($oldchar, $newchar, $str);
}
/**
* 把json字符串或json对象转json数组
* @param $output
* @return array
*/
public function toArray($output): array
{
if (is_array($output)) {
return $output;
}
if (is_object($output)) {
$output = json_encode($output, JSON_UNESCAPED_UNICODE);
}
return json_decode($output, true);
}
/**
* @param $array
* @return array
*/
public function valChunk($array,$name): array
{
$result = array();
$ar2 = [];
foreach ($array as $key => $value) {
foreach ($array as $k => $val) {
if ($value["{$name}"] == $val["{$name}"]) {
$ar2[] = $val;
}
}
$result[$value["{$name}"]] = $ar2;
$ar2 = [];
}
return $result;
}
}