<?php
declare (strict_types = 1);
namespace app\tools\controller;
use app\BaseController;
class Index extends BaseController
{
public function sortArrByManyField(){
$args = func_get_args();
if(empty($args)){
return null;
}
$arr = array_shift($args);
if(!is_array($arr)){
throw new Exception("第一个参数不为数组");
}
foreach($args as $key => $field){
if(is_string($field)){
$temp = array();
foreach($arr as $index => $val){
$temp[$index] = $val[$field];
}
$args[$key] = $temp;
}
}
$args[] = &$arr $keys = array_keys($args[0]);
call_user_func_array('array_multisort', $args);
return array_pop($args);
}
public function array_cover($cover = array(), $covered = array())
{
if(is_array($cover) && is_array($covered))
{
foreach ($cover as $key => $value) {
if(isset($covered[$key]) == true)
{
$covered[$key] = $cover[$key];
}
}
}
return $covered;
}
public function strToArray($str = array())
{
if(is_array($str) == false)
{
if ($str != '' || $str != null) {
$str = (string)$str;
$str = explode(',', $str);
foreach ($str as $key => $value) {
if($value == "" && $value == null){
unset($str[$key]);
}
}
}else{
$str = array();
}
}else{
$str = $str;
}
return $str;
}
public function reSetObject($obj, $srcfrom)
{
$src = [
'field' => ''
,'order' => 'asc'
,'page' => 1
,'limit' => 10
];
$src = array_cover($srcfrom, $src) ;
$data = [
'code' => 0 ,'msg' => "" ,'count' => 0 ,'data' => '' ];
$cnt = $obj->count();
if($cnt > 0)
{
if($src['field'] != '') # 排序
{
$obj = $obj->order($src['field'], $src['order']);
}
$limit_start = $src['page'] * $src['limit'] - $src['limit'];
$limit_length = $src['limit'] * 1;
$obj = $obj->slice($limit_start, $limit_length);
$data = [
'code' => 0 ,'msg' => "" ,'count' => $cnt ,'data' => $obj ];
}
return $data;
}
public function reSetArray($arr = array(), $srcfrom)
{
$src = [
'field' => ''
,'order' => 'desc'
,'page' => 1
,'limit' => 10
];
$src = array_cover($srcfrom, $src) ;
$data = [ # 数据合并
'code' => 0 , # ajax请求次数,作为标识符
'msg' => "", # 获取到的结果数(每页显示数量)
'count' => 0, # 符合条件的总数据量
'data' => [], # 获取到的数据结果
];
$cnt = count($arr); # 记录总数
if($cnt > 0){
if($src['field'] != '')
{
$src['order'] == 'desc' ? $src['order'] = SORT_DESC
: $src['order'] = SORT_ASC; # 数据排序
$arr = $this->sortArrByManyField($arr, $src['field'], $src['order']);
}
$limit_start = $src['page'] * $src['limit'] - $src['limit']; # 获取当前页数据
$limit_length = $src['limit'];
$arr = array_slice($arr, $limit_start, $limit_length);
$data = [ # 数据合并
'code' => 0 , # ajax请求次数,作为标识符
'msg' => "", # 获取到的结果数(每页显示数量)
'count' => $cnt, # 符合条件的总数据量
'data' => $arr, # 获取到的数据结果
];
}
return $data;
}
public function encrypt($data, $key)
{
$key = md5($key);
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = '';
$str = '';
for ($i = 0; $i < $len; $i++)
{
if ($x == $l)
{
$x = 0;
}
$char .= $key{$x};
$x++;
}
for ($i = 0; $i < $len; $i++)
{
$str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
}
return base64_encode($str);
}
public function decrypt($data, $key)
{
$key = md5($key);
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
$char = '';
$str = '';
for ($i = 0; $i < $len; $i++)
{
if ($x == $l)
{
$x = 0;
}
$char .= substr($key, $x, 1);
$x++;
}
for ($i = 0; $i < $len; $i++)
{
if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))
{
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
}
else
{
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
}
}
return $str;
}
}