$value) { $options[$value[$key]] = $value[$val]; } } return $options; } function M($TABLE_NAME = "") { return new DB($TABLE_NAME); } function checkClose() { if (file_exists(ROOT_PATH . '/Cache/system.lock')) { if (is_mobile()) { return appExec("Mobile", "Weihu", "index"); } else { return appExec("home", "weihu", "index"); } } } /** * 发布消息 * * @param integer $status * @param string $msg * @param string $data * @return void */ function publishNotify($channel, $status = 1, $data = '') { // toLog('publishNotify-'.$channel.'+++'.$data); C()->get('msg')->publish($channel, $data); } /** * 数组分类排序 * @param [array] $columnsArr [需要进行排序的数组] * @param [int] $plmid [所属分类ID] */ function getColumns($columnsArr, $plmid) { $menu = array(); foreach ($columnsArr as $v) { if ($v['plmid'] == $plmid) { $menu[] = $v; $a = getColumns($columnsArr, $v['lmid']); foreach ($a as $vv) { $menu[] = $vv; } } } return $menu; } /** * 获取客户端真实IP */ function GETIP() { global $ip; if (getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); } else if (getenv("HTTP_X_FORWARDED_FOR")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); } else if (getenv("REMOTE_ADDR")) { $ip = getenv("REMOTE_ADDR"); } else { $ip = "Unknow"; } return $ip; } function dump($data, $exit = 1) { echo "
";
print_r($data);
echo "";
if ($exit) {
exit;
}
}
function OrderID($prefix = '') {
$num = mt_rand(100, 999);
list($s, $m) = explode(' ', microtime());
$order = date("YmdHis") . ($s * 1000000) . $num;
return $prefix . $order;
}
/**
* 容器
*/
function C() {
static $c = array();
if (!isset($c['container'])) {
$c['container'] = new \System\Di();
}
return $c['container'];
}
/**
* 全局变量快捷操作
* @param [type] $key [description]
* @param [type] $value [description]
*/
function S($key, $value = null) {
if ($value != null) {
$GLOBALS[$key] = $value;
}
if (isset($GLOBALS[$key])) {
return $GLOBALS[$key];
}
}
/**
* 载入模型
* @param [type] $name [description]
* @param string $proj [description]
* @return [type] [description]
*/
function lm($name, $proj = '') {
$proj = empty($proj) ? S('CUR_PROJECT') : $proj;
if (empty($proj)) {
throw new \Exception("项目{$proj}不存在", 1);
}
$cls = "\\App\\" . ucfirst($proj) . "\\Model\\" . ucfirst($name);
if(!class_exists($cls)){
return;
}
$key = 'model_' . $name . $proj;
C()->shared($key, $cls);
return C()->get($key);
}
/**
* 载入语言包
* @param string $key 语言项
* @param string $file 语言文件名
* @param string $proj 项目名称
* @return [type] [description]
*/
function lang($file = '', $proj = '') {
$proj = empty($proj) ? S('CUR_PROJECT') : $proj;
$file = empty($file) ? S('CUR_CONTROLLER') : $file;
$ckey = "Lang_{$proj}_{$file}";
if (C()->has($ckey)) {
return C()->get($ckey);
} else {
C()->shared($ckey, function () use ($proj, $file) {
$file = ucfirst($file);
$proj = ucfirst($proj);
$lang = new \System\Lang();
$lang_files = array();
if (S('CUR_PROJECT') == $proj && S('CUR_CONTROLLER') == $file) {
$lang_files[] = ROOT_PATH . "/Application/Commons/Lang/Common.php";
$lang_files[] = ROOT_PATH . "/Application/{$proj}/Lang/Common.php";
}
$lang_files[] = ROOT_PATH . "/Application/{$proj}/Lang/{$file}.php";
$data = array();
foreach ($lang_files as $v) {
if (file_exists($v)) {
$data2 = include $v;
if (is_array($data2)) {
$data = array_merge($data, $data2);
}
}
}
$lang->load($data);
return $lang;
});
return C()->get($ckey);
}
}
/**
* 标签替换
*
* @param [type] $message
* @param array $data
* @param string $tag
* @return void
*/
function parseTag($message,$data=array(),$tag='#'){
if(is_array($data) && count($data)>0){
foreach ($data as $k => $v) {
$message = str_replace($tag . $k . $tag, $v, $message);
}
}
return $message;
}
function appExec($proj, $ctrl, $method, $exec = 0) {
$proj = ucfirst($proj);
$ctrl = ucfirst($ctrl);
$method = ucfirst($method);
S('CUR_PROJECT', $proj);
S('CUR_CONTROLLER', $ctrl);
S('CUR_METHOD', $method);
checkPlatform();
toDomain();
//设置REMOTE_KEY
lm('setinfo','commons')->setKey();
$cls = "\\App\\{$proj}\\Controller\\{$ctrl}";
C()->set($ctrl, $cls);
$cls = C()->get($ctrl);
if (!$cls) {
exit("404 NOT FOUND");
}
if ($exec) {
$result = $cls->$method();
if (!empty($result)) {
Render($result);
}
}
if (method_exists($cls, $method)) {
$result = $cls->$method();
if (!empty($result)) {
Render($result);
}
} else {
exit("404 METHOD NOT FOUND");
}
}
/**
* UUID 生成
*/
function UUID() {
$prefix = '';
$uuid = '';
$str = md5(uniqid(mt_rand(), true));
$uuid = substr($str, 0, 8) . '-';
$uuid .= substr($str, 8, 4) . '-';
$uuid .= substr($str, 12, 4) . '-';
$uuid .= substr($str, 16, 4) . '-';
$uuid .= substr($str, 20, 12);
return $prefix . $uuid;
}
/**
*密码加密码
*/
function GenEncryption() {
srand((double) microtime() * 1000000); //create a random number feed.
$ychar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
$list = explode(",", $ychar);
$authnum = "";
for ($i = 0; $i < 6; $i++) {
$randnum = rand(0, 61); // 10+26;
$authnum .= $list[$randnum];
}
return $authnum;
}
//密码加密
function GenPassword($password) {
$Enc = GenEncryption();
$Pwd = md5(md5($Enc . $password));
return array("encryption" => $Enc, "password" => $Pwd);
}
//密码验证
function VerPassword($identity, $password) {
$account = M("account_password")->where("account_identity = '$identity' and", "status = ", '1')->select("encryption,account_password")->find();
$VerPwd = md5(md5($account["encryption"] . $password));
if ($VerPwd == $account["account_password"]) {
unset($account);
unset($VerPwd);
return true;
} else {
unset($account);
unset($VerPwd);
return false;
}
}
/**
* Json return
* @param string $data [description]
* @param string $status [description]
* @param string $msg [description]
* @param string $method [description]
*/
function JsonReturn($data = "", $status = "200", $msg = "", $method = "") {
// header("Content-type:application/json;charset:utf-8");
// header('content-type:text/html; charset=utf-8');
if(isset($_REQUEST['crossdomain']) && !empty($_REQUEST['crossdomain'])){
header("Access-Control-Allow-Origin:{$_REQUEST['crossdomain']}");
}else{
header("Access-Control-Allow-Origin:*");
}
header('Access-Control-Allow-Methods:POST,GET,PUT,DELETE,OPTIONS');
header('Access-Control-Allow-Credentials:true');
$retdata=array("status" => $status, "msg" => $msg, "data" =>$data);
$devicetype=isset($_REQUEST['devicetype'])?trim($_REQUEST['devicetype']):'';
if(!empty($devicetype) && in_array($devicetype,array('ios','android'))){
$path=S('CUR_PROJECT').'/'.S('CUR_CONTROLLER').'/'. S('CUR_METHOD');
$retdata=C()->get($devicetype."Result")->update($path,$retdata);
}
if ($method == '') {
//dump($devicetype);
echo (json_encode($retdata,JSON_UNESCAPED_UNICODE));
} else {
echo ($method . "(" . json_encode($retdata,JSON_UNESCAPED_UNICODE) . ")");
}
}
function XmlReturn($data = "", $status = 200, $msg = '') {
// header("Content-type:text/xml;charset:utf-8");
$xml = '';
$xml .= "执行{$runName} 功能,当前时间为:{$curTime},累积用时: {$numTime}";
return;
}
}
function get_millisecond()
{
list($usec, $sec) = explode(" ", microtime());
$msec = round($usec * 1000);
return $sec . $msec;
}
function toLog($text, $rewrite = 0) {
$data = "=============" . date("Y-m-d H:i", time()) . "==========================================" . chr(13);
$data .= var_export($text, 1) . chr(13);
$data .= "======================================================================================" . chr(13);
$data = iconv('utf-8', 'gb2312', $data);
if ($rewrite) {
file_put_contents(ROOT_PATH . '/logs.txt', $data);
} else {
file_put_contents(ROOT_PATH . '/logs.txt', $data, FILE_APPEND);
}
}
/**
* 发送数据到前台,根据请求的数据格式返回相应的数据
* @param [type] $data [description]
* @param string $status [description]
* @param string $msg [description]
*/
function Render($data, $status = "1", $msg = "", $method = '') {
$format = S('CUR_RETURN_FORMAT');
$msg = empty($msg) ? lang('errors', 'api')->get('error' . $status) : $msg;
if (empty($format) || $format == 'json') {
JsonReturn($data, $status, $msg);
}
if ($format == 'xml') {
XmlReturn($data, $status, $msg);
}
exit;
}
function _beginTransaction() {
S('DB')->beginTransaction();
}
function _rollBack() {
S('DB')->rollBack();
}
function _commit() {
S('DB')->commit();
}
/**
* 服务
*
* @param string 服务名称
* @param array $params
* @return void
*/
function SRV($name, $params = array()) {
return C()->get($name)->update($params);
}
/**
* 是否验证token过期
*
* @return bool
*/
function isCheckToken() {
$result = true;
$allowMethod = include ROOT_PATH . "/Config/AllowMethod.php";
$key = S('CUR_PROJECT') . '/' . S('CUR_CONTROLLER') . '/' . S('CUR_METHOD');
if ($allowMethod[$key] == 1) {
$result = false;
}
return $result;
}
function checkPlatform(){
if(isset($_GET['platform'])){
$_SESSION['platform']=$_GET['platform']=='wap'?1:0;
}
if(isset($_GET['clearPlatform']) && intval($_GET['clearPlatform'])==1){
$_SESSION['platform']=null;
}
}
function is_mobile() {
if(isset($_SESSION['platform']) && $mobile=intval($_SESSION['platform'])>0 ){
return $mobile==1?true:false;
}
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$mobile_agents = Array("240x320", "acer", "acoon", "acs-", "abacho", "ahong", "airness", "alcatel", "amoi", "android", "anywhereyougo.com", "applewebkit/525", "applewebkit/532", "asus", "audio", "au-mic", "avantogo", "becker", "benq", "bilbo", "bird", "blackberry", "blazer", "bleu", "cdm-", "compal", "coolpad", "danger", "dbtel", "dopod", "elaine", "eric", "etouch", "fly ", "fly_", "fly-", "go.web", "goodaccess", "gradiente", "grundig", "haier", "hedy", "hitachi", "htc", "huawei", "hutchison", "inno", "ipad", "ipaq", "ipod", "jbrowser", "kddi", "kgt", "kwc", "lenovo", "lg ", "lg2", "lg3", "lg4", "lg5", "lg7", "lg8", "lg9", "lg-", "lge-", "lge9", "longcos", "maemo", "mercator", "meridian", "micromax", "midp", "mini", "mitsu", "mmm", "mmp", "mobi", "mot-", "moto", "nec-", "netfront", "newgen", "nexian", "nf-browser", "nintendo", "nitro", "nokia", "nook", "novarra", "obigo", "palm", "panasonic", "pantech", "philips", "phone", "pg-", "playstation", "pocket", "pt-", "qc-", "qtek", "rover", "sagem", "sama", "samu", "sanyo", "samsung", "sch-", "scooter", "sec-", "sendo", "sgh-", "sharp", "siemens", "sie-", "softbank", "sony", "spice", "sprint", "spv", "symbian", "tablet", "talkabout", "tcl-", "teleca", "telit", "tianyu", "tim-", "toshiba", "tsm", "up.browser", "utec", "utstar", "verykool", "virgin", "vk-", "voda", "voxtel", "vx", "wap", "wellco", "wig browser", "wii", "windows ce", "wireless", "xda", "xde", "zte");
$is_mobile = false;
foreach ($mobile_agents as $device) {
if (stristr($user_agent, $device)) {
$is_mobile = true;
break;
}
}
return $is_mobile;
}
function toDomain() {
$domain = $_SERVER['HTTP_HOST'];
$config = include ROOT_PATH . '/Config/Domain.php';
$is_mobile = is_mobile();
$curDomain = $old_domain = $domain;
if (is_array($config) && count($config) > 0) {
$domains = array();
$domains[] = $domain;
if ($is_mobile) {
$domains[] = str_replace('www.', 'm.', $domain);
$domains[] = 'm.' . $domain;
} else {
$domains[] = str_replace('m.', '', $domain);
$domains[] = str_replace('m.', 'www.', $domain);
}
foreach ($domains as $key => $value) {
if (isset($config[$value])) {
$v = $config[$value];
if ($v == 'pay') {
return;
}
if ($is_mobile) {
if ($v == 'pc') {
continue;
}
} else {
if ($v != 'pc') {
continue;
}
}
$curDomain = $value;
// $_SESSION['domain']=$value;
}
}
}
// echo $curDomain;
if ($is_mobile) {
if (S('CUR_PROJECT') == 'Home') {
header("Location:http://" . $curDomain . "/m");
//header("Location:http://" . $curDomain . "/mobile-index/index");
}
} else {
if (S('CUR_PROJECT') == 'Mobile') {
header("Location:http://" . $curDomain . "/home-index/index");
}
}
/**
* 数据签名认证
* @param array $data 被认证的数据
* @return string 签名
*/
function data_auth_sign($data) {
//数据类型检测
if (!is_array($data)) {
$data = (array) $data;
}
ksort($data); //排序
$code = http_build_query($data); //url编码并生成query字符串
$sign = sha1($code); //生成签名
return $sign;
}
/*
* 判断用户是否登录
* */
function isLogin($str = '',$type='agent') {
$session = $_SESSION[$type.'Info'];
if(empty($session)){
return null;
}
if($type=='agent'){
if($str=='name'){
return $session['agent_user'];
}
if($str=='uid'){
return $session['user_identity'];
}
}
}
}
function jump($url){
header('Location:'.$url);
}
//手机中间星号
function phoneHide($phone)
{
if (!empty($phone)) {
$phone = substr_replace($phone, '****', 3, 4);
}
return $phone;
}
/**
* @param $game_code 球类代码
* @param int $isJoin 是否用于join
* @return array
* @throws Exception
* 根据球类代码 定义相关model
*/
function getModels($game_code,$isJoin=1){
$game_type = lm('GameType', 'Sports')->where('game_code',$game_code)->select('game_code')->first();
// 获取不同球类model
if($isJoin == 1){
switch ($game_type->game_code){
case 'zq':
$model_league = 'st_zq_league';
$model_match = 'st_zq_competition';
$model_odds = 'st_zq_odds';
$model_odds_record = 'st_zq_odds_record';
$model_result = 'st_zq_result';
$model_result_record = 'st_zq_result_record';
$model_league_result = 'st_zq_league_result';
$model_local_league = 'st_zq_local_league';
$model_local_match = 'st_zq_local_match';
break;
case 'lq':
$model_league = 'st_lq_league';
$model_match = 'st_lq_competition';
$model_odds = 'st_lq_odds';
$model_odds_record = 'st_lq_odds_record';
$model_result = 'st_lq_result';
$model_result_record = 'st_lq_result_record';
$model_league_result = 'st_lq_league_result';
$model_local_league = 'st_lq_local_league';
$model_local_match = 'st_lq_local_match';
break;
case 'wq':
$model_league = 'st_wq_league';
$model_match = 'st_wq_competition';
$model_odds = 'st_wq_odds';
$model_odds_record = 'st_wq_odds_record';
$model_result = 'st_wq_result';
$model_result_record = 'st_wq_result_record';
$model_league_result = 'st_wq_league_result';
$model_local_league = 'st_wq_local_league';
$model_local_match = 'st_wq_local_match';
break;
case 'bq':
$model_league = 'st_bq_league';
$model_match = 'st_bq_competition';
$model_odds = 'st_bq_odds';
$model_odds_record = 'st_bq_odds_record';
$model_result = 'st_bq_result';
$model_result_record = 'st_bq_result_record';
$model_league_result = 'st_bq_league_result';
$model_local_league = 'st_bq_local_league';
$model_local_match = 'st_bq_local_match';
break;
case 'gj':
$model_league = 'st_zq_league';
$model_match = 'st_zq_competition';
$model_odds = 'st_zq_odds';
$model_result = 'st_zq_result';
break;
default:
throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
}
}else{
switch ($game_type->game_code){
case 'zq':
$model_league = 'st_zq_league';
$model_match = 'st_zq_competition';
$model_odds = 'st_zq_odds';
$model_result = 'SoccerResult';
break;
case 'lq':
$model_league = 'st_lq_league';
$model_match = 'st_lq_competition';
$model_odds = 'st_lq_odds';
$model_result = 'BasketballResult';
break;
case 'wq':
$model_league = 'st_wq_league';
$model_match = 'st_wq_competition';
$model_odds = 'st_wq_odds';
$model_result = 'TennisResult';
break;
case 'bq':
$model_league = 'st_bq_league';
$model_match = 'st_bq_competition';
$model_odds = 'st_bq_odds';
$model_result = 'BaseballResult';
break;
case 'gj':
$model_league = 'st_zq_league';
$model_match = 'st_zq_competition';
$model_odds = 'st_zq_odds';
$model_result = 'SoccerResult';
break;
default:
throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
}
}
$data = [
'model_league'=>$model_league,//联赛
'model_match'=>$model_match,//赛事
'model_odds'=>$model_odds,//赔率
'model_result' =>$model_result,//赛事结果
'model_odds_record' => $model_odds_record,//赔率记录
'model_result_record' =>$model_result_record,//赛事结果记录
'model_league_result'=>$model_league_result,//联赛结果
'model_local_league'=>$model_local_league,//本地关联联赛
'model_local_match'=>$model_local_match,//本地关联赛事
];
return $data;
}
/**
* @param $type_code
* @return array
* @throws \Exception
* 获取不同状态下的 查询条件
*/
function getState($type_code,$model_match = ''){
if($model_match == ''){
switch ($type_code){
case 'StRollBall'://滚球 正在进行
$where = [
// ['is_rollball','=',1],
['status','<','2'],
['match_date','=',date("Y-m-d")],
['match_time','>',date("H:i:s", time()-(90*60))],
['match_time','<',date("H:i:s", time())]
];
break;
case 'StSoon'://即将 今日两小时内开始
$where = [
['status','=','0'],
['match_date','=',date("Y-m-d")],
['match_time','<',date("H:i:s", strtotime("+2 hour"))],
['match_time','>',date("H:i:s", time())]
/*
['utime','>',date("Y-m-d").' 00:00:00']
*/
];
break;
case 'StToday'://今日 今日未开始未结束
$where = [
['status', '<', '2'],
['match_date','=',date("Y-m-d")],
['match_time','>',date("H:i:s", time())],
/*
['is_today', '=', 1],
['type', '=', '1'],
['utime','>',date("Y-m-d").' 00:00:00']
*/
];
break;
case 'StMorningPlate'://早盘
$where = [
['status', '<', '2'],
['is_morningplate', '=', 1],
['us_time','>',$this->qgmdate('Y-m-d H:i:s', '', -4)],
/*
['match_date','>',date("Y-m-d",time())],
['match_time','>',date("H:i:s", time())],
['type', '=', '2'],
['utime','>',date("Y-m-d").' 00:00:00']
*/
];
break;
case 'StStringScene'://串场
$where = [
['status', '<', '2'],
['is_stringscene', '=', 1],
['us_time','>',$this->qgmdate('Y-m-d H:i:s', '', -4)],
/*
['match_date','>',date("Y-m-d",time())],
['match_time','>',date("H:i:s", time())],
['type', '=', '3'],
['utime','>',date("Y-m-d").' 00:00:00']
*/
];
break;
case 'StChampion'://冠军
$where = [
'type'=>1
];
break;
default:
throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
}
}else{
switch ($type_code){
case 'StRollBall'://滚球 正在进行
$where = [
// [$model_match.'.is_rollball','=',1],
[$model_match.'.status','<','2'],
[$model_match.'.match_date','=',date("Y-m-d")],
[$model_match.'.match_time','>',date("H:i:s", time()-(90*60))],
[$model_match.'.match_time','<',date("H:i:s", time())]
];
break;
case 'StSoon'://即将 今日两小时内开始
$where = [
[$model_match.'.status','=','0'],
[$model_match.'.match_date','=',date("Y-m-d")],
[$model_match.'.match_time','<',date("H:i:s", strtotime("+2 hour"))],
[$model_match.'.match_time','>',date("H:i:s", time())]
/*
[$model_match.'.utime','>',date("Y-m-d").' 00:00:00']
*/
];
break;
case 'StToday'://今日 今日未开始未结束
$where = [
[$model_match.'.status', '<', '2'],
[$model_match.'.match_date','=',date("Y-m-d")],
[$model_match.'.match_time','>',date("H:i:s", time())],
/*
[$model_match.'.utime','>',date("Y-m-d").' 00:00:00'],
[$model_match.'.is_today','=',1],
[$model_match.'.type', '=', '1'],
*/
];
break;
case 'all'://所有赛事
$where = [
[$model_match.'.status', '<', '2'],
];
break;
case 'StMorningPlate'://早盘
$where = [
[$model_match.'.status', '<', '2'],
[$model_match.'.is_morningplate','=',1],
[$model_match.'.us_time','>',$this->qgmdate('Y-m-d H:i:s', '', -4)],
/*
[$model_match.'.match_date','>',date("Y-m-d",time())],
[$model_match.'.match_time','>',date("H:i:s", time())],
[$model_match.'.type', '=', '2'],
[$model_match.'.utime','>',date("Y-m-d").' 00:00:00']
*/
];
break;
case 'StStringScene'://串场 查询串场状态为1 开赛时间大于当前时间
$where = [
[$model_match.'.is_stringscene','=',1],
[$model_match.'.us_time','>',$this->qgmdate('Y-m-d H:i:s', '', -4)],
[$model_match.'.status', '<', '2'],
/*
[$model_match.'.match_date','>',date("Y-m-d",time())],
[$model_match.'.match_time','>',date("H:i:s", time())],
[$model_match.'.type', '=', '3'],
[$model_match.'.utime','>',date("Y-m-d").' 00:00:00']
*/
];
break;
case 'StChampion'://冠军
$where = [
'type'=>1
];
break;
default:
throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
}
}
return $where;
}
/**
* @param $data
* @return array
* 处理当国家下无联赛数据 删除该数组
*/
function handleArr($data){
$hData = [];
foreach ($data as $key =>$v){
if(empty($v['league_count'])){
$v = [];
}
$hData[]=$v;
}
foreach($hData as $k=>$v){
if(empty($v)){
unset($hData[$k]);
}
}
foreach ($hData as $k=>$v){
$v['league_count'] = array_values($v['league_count']);
$hData[$k]=$v;
}
return array_values($hData);
}
/**
* @param $arr
* @param $key
* @return array
* 去除二维数组重复项
*/
function array_unset_tt($arr,$key){
//建立一个目标数组
$res = array();
foreach ($arr as $value) {
//查看有没有重复项
if(isset($res[$value[$key]])){
unset($value[$key]); //有:销毁
}else{
$res[$value[$key]] = $value;
}
}
return $res;
}
/**
* 处理冠军盘口 数组结构
*/
function array_gj_tt($data,$oddsData){
foreach ($data as $k=>&$v){
foreach ($v['league_count'] as $kk=>&$vv){
foreach ($oddsData as $kkk=>$vvv){
if($vv['lg_id'] == $vvv['lg_id']){
$vv['oddsData'][]=$vvv;
}
}
if($vv['oddsData']){
$vv['oddsData'] = $this->array_unset_tt($vv['oddsData'],'p_code');
$vv['count'] = count($vv['oddsData']);
unset($vv['oddsData']);
}
if(count($vv) != 5){
unset($v['league_count'][$kk]);
}
}
$v['league_count'] = array_values($v['league_count']);
if(empty($v['league_count'])){
unset($data[$k]);
}
}
return array_values($data);
}
/**
* 处理冠军以外 数组结构
*/
function array_other_tt($data,$matchData){
foreach ($data as $k=>&$v){
foreach ($v['league_count'] as $kk=>&$vv){
foreach ($matchData as $kkk=>$vvv){
if($vv['lg_id'] == $vvv['lg_id']){
$vv['matchData'][]=$vvv;
}
}
if($vv['matchData']){
$vv['matchData'] = $this->array_unset_tt($vv['matchData'],'match_id');
$vv['count'] = count($vv['matchData']);
unset($vv['matchData']);
}
if(empty($vv['count'])){
unset($v['league_count'][$kk]);
}
}
$v['league_count'] = array_values($v['league_count']);
if(empty($v['league_count'])){
unset($data[$k]);
}
}
return array_values($data);
}
/**
* 时间格式化
* @param string $dateformat 时间格式
* @param int $timestamp 时间戳
* @param int $timeoffset 时区偏差 默认8 北京时间 -4美东时间
* @return string
*/
function qgmdate($dateformat = 'Y-m-d H:i:s', $timestamp = '', $timeoffset = 8,$type = '') {
if(empty($timestamp)) {
$timestamp = time();
}
$result = gmdate($dateformat, $timestamp + $timeoffset * 3600);
return $result;
}
/**
* 判断二维数组是否包含一维数组
* @param mixed $arr 查询条件
* @param mixed $arrs 运动类型
* @return string
*/
function judgeEqual($arr, $arrs){
foreach ($arrs as $value) {
if (count($value) === count($arr)) {
$a = 0;
foreach ($value as $key => $v) {
$a++;
if ($v != $arr[$key]) {
break;
}
if ($a == count($key)) { // 到最后一个元素都没有出现不相等,就说明这两个数组相等。
return true;
}
}
}
}
return false;
}
// 排列
function arrangement($a, $m) {
$r = array();
$n = count($a);
if ($m <= 0 || $m > $n) {
return $r;
}
for ($i=0; $i<$n; $i++) {
$b = $a;
$t = array_splice($b, $i, 1);
if ($m == 1) {
$r[] = $t;
} else {
$c = $this->arrangement($b, $m-1);
foreach ($c as $v) {
$r[] = array_merge($t, $v);
}
}
}
return $r;
}
// 组合
function combination($a, $m) {
$r = array();
$n = count($a);
if ($m <= 0 || $m > $n) {
return $r;
}
for ($i=0; $i<$n; $i++) {
$t = array($a[$i]);
if ($m == 1) {
$r[] = $t;
} else {
$b = array_slice($a, $i+1);
$c = $this->combination($b, $m-1);
foreach ($c as $v) {
$r[] = array_merge($t, $v);
}
}
}
return $r;
}
// 阶乘
function factorial($n) {
return array_product(range(1, $n));
}
// 排列数
function A1($n, $m) {
return factorial($n)/factorial($n-$m);
}
// 组合数
function C1($n, $m) {
return A1($n, $m)/factorial($m);
}
//处理空赔率赛事
function Handle_Odds_Null($matchData=[],$models=[],$oddsTypeWhere=[]){
//===获取当前赛事是否有赔率,如果没有则去除===
//获取当前match_id
$match_ids = [];
foreach($matchData as $k=>$v){
$match_ids[] = $v['match_id'];
}
//获取下赛事赔率
// $oddsData = lm($models['model_odds'],'Sports')
// ->whereIn('match_id',$match_ids)
// ->where($oddsTypeWhere)
// ->pluck('match_id')
// ->toArray();
$oddsData = lm($models['model_odds'],'Sports')
->select('match_id')
->whereIn('match_id',$match_ids)
->where($oddsTypeWhere)
->distinct('match_id')
->get()
->toArray();
// dd($oddsData);
// echo count($oddsData);
// $oddsData = $this->array_unset_tt($oddsData,'match_id');
// sort($oddsData);
// echo '';
// echo count($oddsData);
// echo '';
// echo date('Y-m-d H:i:s',time());
// exit;
//如果赔率为空,则返回空
if(empty($oddsData)) return $oddsData;
$matchData_new = [];
foreach($matchData as $k=>$v){
foreach($oddsData as $kk=>$vv){
if($v['match_id'] == $vv['match_id']){
$matchData_new[] = $matchData[$k];
}
}
}
return $matchData_new;
//===赛事空赔率 处理end ===
}
//处理空赔率联赛
function Handle_Odds_Null_lg($matchData=[],$models=[]){
//===获取当前联赛是否有赔率,如果没有则去除===
//获取当前lg_id
$lg_ids = [];
foreach($matchData as $k=>$v){
$lg_ids[] = $v['lg_id'];
}
//获取下赛事赔率
// $oddsData = lm($models['model_odds'],'Sports')
// ->whereIn('lg_id',$lg_ids)
// ->where('type',1)
// ->pluck('lg_id')
// ->toArray();
$oddsData = lm($models['model_odds'],'Sports')
->select('lg_id')
->whereIn('lg_id',$lg_ids)
->where('type',1)
->distinct('lg_id')
->get()
->toArray();
// $oddsData = array_unique($oddsData);
// sort($oddsData);
//如果赔率为空,则返回空
if(empty($oddsData)) return $oddsData;
$matchData_new = [];
foreach($matchData as $k=>$v){
foreach($oddsData as $kk=>$vv){
if($v['lg_id'] == $vv['lg_id']){
$matchData_new[] = $matchData[$k];
}
}
}
return $matchData_new;
//===联赛空赔率 处理end ===
}
/**
* 处理各球类投注: 可赢金额计算
* $game_code 球类代码
* $p_code 父级玩法代码
* $odds 赔率
* $bet_amount 投注金额
* $type 投注类型 1单式
*/
function getEarnMoney($game_code='',$p_code='',$odds=0,$bet_amount=0,$type=0){
//单式投注
if($type == 1){
//足球 可赢金额 计算规则
if($game_code == 'zq'){
//球队进球数:大/小;进球:大/小;让球;
if($p_code == 'tema_ball' || $p_code == 'goal_size' || $p_code == 'concede'){
//可赢金额 = 赔率*投注金额
$prize_money = $odds*$bet_amount;
}else{
//可赢金额 = (赔率-1)*投注金额
$prize_money = ($odds-1)*$bet_amount;
}
}
//篮球 可赢金额 计算规则
if($game_code == 'lq'){
//可赢金额 = 赔率*投注金额
$prize_money = $odds*$bet_amount;
}
//网球 可赢金额 计算规则
if($game_code == 'wq'){
//可赢金额 = 赔率*投注金额
$prize_money = $odds*$bet_amount;
}
//棒球 可赢金额 计算规则
if($game_code == 'bq'){
//可赢金额 = 赔率*投注金额
$prize_money = $odds*$bet_amount;
}
}
return $prize_money;
}
}
?>