123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2013-2019 http://www.thinkcmf.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- // +----------------------------------------------------------------------
- // | Author: 老猫 <thinkcmf@126.com>
- // +----------------------------------------------------------------------
- namespace app\matchmaker\controller;
- use app\common\Constant;
- use app\common\Fun;
- use app\love\model\UserModel;
- use app\matchmaker\model\MatchmakerUserFollowModel;
- use app\matchmaker\model\MatchmakerUserMatingModel;
- use app\matchmaker\model\MatchmakerUserModel;
- class UserController extends MatchmakerBaseController
- {
- public function infoAdd()
- {
- $data = [
- 'sex' => Constant::SEX_MATCHMAKER,
- 'marry' => Constant::MARRY,
- 'high' => Constant::HIGH,
- 'weight' => Constant::WEIGHT,
- 'education' => Constant::EDUCATION,
- 'income' => Constant::INCOME,
- 'nation' => Constant::NATION,
- 'smoke' => Constant::SMOKE,
- 'drink' => Constant::DRINK,
- 'family' => Constant::FAMILY,
- 'tinyint' => Constant::TINYINT,
- 'animal' => Constant::ANIMAL,
- ];
- foreach ($data as &$v) {
- $v = json_encode($v);
- unset($v);
- }
- return $this->fetch('', $data);
- }
- public function infoAddPost()
- {
- $value = $this->request->post();
- $value['birthday'] = strtotime($value['birthday']);
- $value['matchmaker_id'] = $this->matchmaker['id'];
- $user = MatchmakerUserModel::create($value);
- MatchmakerUserMatingModel::create(['user_id' => $user['id'], 'animal' => []]);
- $this->success('', '', ['id' => $user['id']]);
- }
- public function matingAdd()
- {
- $id = $this->request->param('id');
- if (empty($id)) {
- $this->error('参数错误');
- }
- $mating = MatchmakerUserMatingModel::get(['user_id' => $id]);
- if (empty($mating['animal'])) {
- $mating['animal'] = [];
- }
- $this->assign('mating', $mating);
- $education = Constant::EDUCATION;
- $education[] = '无要求';
- $data = [
- 'min_age' => Constant::MIN_AGE,
- 'max_age' => Constant::MAX_AGE,
- 'min_high' => Constant::MIN_HIGH,
- 'max_high' => Constant::MAX_HIGH,
- 'min_weight' => Constant::MIN_WEIGHT,
- 'max_weight' => Constant::MAX_WEIGHT,
- 'native' => Constant::NATIVE,
- 'education' => $education,
- 'income' => Constant::COND_INCOME,
- 'smoke' => Constant::MATTING_SMOKING,
- 'drink' => Constant::MATTING_DRINK,
- 'tinyint' => Constant::COND_TINYINT,
- 'animal' => Constant::ANIMAL,
- ];
- foreach ($data as &$v) {
- $v = json_encode($v);
- unset($v);
- }
- return $this->fetch('', $data);
- }
- public function matingAddPost()
- {
- $param = $this->request->post();
- if (empty($param['animal'])) {
- $param['animal'] = [];
- }
- MatchmakerUserMatingModel::update($param);
- $this->success('操作成功');
- }
- public function infoEdit()
- {
- $id = $this->request->param('id');
- if (empty($id)) {
- $this->error('参数错误');
- }
- $user = MatchmakerUserModel::get($id);
- if (empty($user)) {
- $this->error('该用户不存在或已删除');
- }
- $user['birthday'] = date('Y-m-d', $user['birthday']);
- $this->assign('user', json_encode($user));
- $data = [
- 'sex' => Constant::SEX_MATCHMAKER,
- 'marry' => Constant::MARRY,
- 'high' => Constant::HIGH,
- 'weight' => Constant::WEIGHT,
- 'education' => Constant::EDUCATION,
- 'income' => Constant::INCOME,
- 'nation' => Constant::NATION,
- 'smoke' => Constant::SMOKE,
- 'drink' => Constant::DRINK,
- 'family' => Constant::FAMILY,
- 'tinyint' => Constant::TINYINT,
- 'animal' => Constant::ANIMAL,
- ];
- foreach ($data as &$v) {
- $v = json_encode($v);
- unset($v);
- }
- return $this->fetch('', $data);
- }
- public function infoEditPost()
- {
- $value = $this->request->post();
- $value['birthday'] = strtotime($value['birthday']);
- MatchmakerUserModel::update($value);
- $this->success();
- }
- public function matingEdit()
- {
- $id = $this->request->param('id');
- if (empty($id)) {
- $this->error('参数错误');
- }
- $mating = MatchmakerUserMatingModel::get(['user_id' => $id]);
- if (empty($mating['animal'])) {
- $mating['animal'] = [];
- }
- $this->assign('mating', $mating);
- $education = Constant::EDUCATION;
- $education[] = '无要求';
- $data = [
- 'min_age' => Constant::MIN_AGE,
- 'max_age' => Constant::MAX_AGE,
- 'min_high' => Constant::MIN_HIGH,
- 'max_high' => Constant::MAX_HIGH,
- 'min_weight' => Constant::MIN_WEIGHT,
- 'max_weight' => Constant::MAX_WEIGHT,
- 'native' => Constant::NATIVE,
- 'education' => $education,
- 'income' => Constant::COND_INCOME,
- 'smoke' => Constant::MATTING_SMOKING,
- 'drink' => Constant::MATTING_DRINK,
- 'tinyint' => Constant::COND_TINYINT,
- 'animal' => Constant::ANIMAL,
- ];
- foreach ($data as &$v) {
- $v = json_encode($v);
- unset($v);
- }
- return $this->fetch('', $data);
- }
- public function matingEditPost()
- {
- $param = $this->request->post();
- if (empty($param['animal'])) {
- $param['animal'] = [];
- }
- MatchmakerUserMatingModel::update($param);
- $this->success('操作成功');
- }
- /**
- * 图片上传
- */
- public function imageUpload()
- {
- $file = $this->request->post('file');
- $ext = pathinfo($this->request->post('name'))['extension'];
- if (!in_array($ext, ['jpg', 'jpeg', 'png'])) {
- $this->error('文件后缀必须为jpg,jpeg,png');
- }
- if ($file) {
- //创建目录
- $upload_dir = WEB_ROOT . 'upload/image';
- if (!is_dir($upload_dir)) {
- @mkdir($upload_dir);
- }
- $upload_dir = $upload_dir . '/' . date('Ymd');
- if (!is_dir($upload_dir)) {
- @mkdir($upload_dir);
- }
- //保存文件
- $file_name = $this->_file_name($ext);
- $file_path = $upload_dir . '/' . $file_name;
- $is_upload = $this->_base64_image_content($file, $file_path);
- if (!$is_upload) {
- $this->error('上传失败,请重新上传');
- }
- $avatar = cmf_get_user_avatar_url('image' . '/' . date('Ymd') . '/' . $file_name);
- $this->result([
- 'avatar' => $avatar,
- ], 1);
- } else {
- $this->error('请上传文件');
- }
- }
- /**
- * 跟进
- */
- public function follow()
- {
- $id = $this->request->get('id');
- $list = MatchmakerUserFollowModel::where('user_id', $id)->append(['create_time_text'])->order('create_time desc')->select();
- $info = MatchmakerUserModel::get($id);
- $info['age'] = Fun::getAgeByBirth($info['birthday']);
- $info['sex_text'] = Constant::SEX[$info['sex']];
- return $this->fetch('', ['list' => $list, 'id' => $id, 'info' => $info]);
- }
- /**
- * 跟进提交
- */
- public function followPost()
- {
- $data = $this->request->param();
- if (empty($data['user_id'])) {
- $this->error('数据异常,请刷新重试');
- }
- if (empty($data['content'])) {
- $this->error('请输入内容');
- }
- $data['create_time'] = time();
- MatchmakerUserFollowModel::create($data);
- $this->success('操作成功');
- }
- public function deleteUser()
- {
- $id = $this->request->post('id', 0);
- if (empty($id)) {
- $this->error('数据异常,请刷新重试');
- }
- MatchmakerUserModel::destroy($id);
- MatchmakerUserMatingModel::destroy(['user_id' => $id]);
- MatchmakerUserFollowModel::destroy(['user_id' => $id]);
- $this->success('操作成功');
- }
- public function statusUser()
- {
- $id = $this->request->post('id', 0);
- $status = $this->request->post('status', 0);
- if (empty($id) || empty($status)) {
- $this->error('数据异常,请刷新重试');
- }
- MatchmakerUserModel::update(['status' => $status], ['id' => $id]);
- $this->success('操作成功');
- }
- /**
- * 匹配
- */
- public function match()
- {
- $id = $this->request->param('id');
- $type = $this->request->param('type', 0);
- $match_field = $this->request->param('match_field', '');
- $mating = MatchmakerUserMatingModel::where('user_id', $id)->find();
- $where = $this->_matchWhere($match_field, $mating);
- if (empty($id)) {
- $this->error('该用户不存在');
- }
- $user = MatchmakerUserModel::get($id);
- if (empty($user)) {
- $this->error('该用户不存在');
- }
- if ($type == 0) {
- //自有库
- $list = MatchmakerUserModel::where('matchmaker_id', $this->matchmaker->id)
- ->where($where)
- ->where('id', '<>', $id)
- ->where('sex', '<>', $user['sex'] == 1 ? 1 : 2)
- ->where('status',2)
- ->append(['sex_text'])
- ->select();
- } elseif ($type == 1) {
- //其他红娘库
- $list = MatchmakerUserModel::with('matchmaker')
- ->where($where)
- ->where('matchmaker_id', '<>', $this->matchmaker->id)
- ->where('sex', '<>', $user['sex'] == 1 ? 1 : 2)
- ->where('status',2)
- ->append(['sex_text'])
- ->select();
- } else {
- //系统库
- $list = UserModel::where('user_type', 2)
- ->where($where)
- ->where('user_status', 1)
- ->where('want_status',2)
- ->where('is_complete', 1)
- ->where('sex', '<>', $user['sex'] == 1 ? 1 : 2)
- ->append(['sex_text'])
- ->select();
- }
- $res = $this->_orderMatchUser($list->toArray(), $mating);
- return $this->fetch('', [
- 'list' => json_encode($res),
- 'type' => $type,
- 'user' => $user,
- 'id' => $id,
- 'mating' => $mating,
- 'match_field' => $match_field,
- 'tinyint' => json_encode(Constant::TINYINT),
- 'cond_tinyint' => json_encode(Constant::COND_TINYINT),
- ]);
- }
- private function _file_name($ext)
- {
- //生成随机文件名
- //定义一个包含大小写字母数字的字符串
- $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- //把字符串分割成数组
- $newchars = str_split($chars);
- //打乱数组
- shuffle($newchars);
- //从数组中随机取出15个字符
- $chars_key = array_rand($newchars, 15);
- //把取出的字符重新组成字符串
- $fnstr = '';
- for ($i = 0; $i < 15; $i++) {
- $fnstr .= $newchars[$chars_key[$i]];
- }
- //输出文件名并做MD5加密
- return md5($fnstr . microtime(true) * 1000) . '.' . $ext;
- }
- private function _base64_image_content($base64_image_content, $file_path)
- {
- //匹配出图片的格式
- if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)) {
- if (file_put_contents($file_path, base64_decode(str_replace($result[1], '', $base64_image_content)))) {
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
- private function _matchWhere($field, $mating)
- {
- $where = [];
- $match_field = [];
- if (!empty($field)) {
- $match_field = explode(',', $field);
- }
- //年龄
- if (in_array('age', $match_field)) {
- $year = date('Y');
- if (!empty($mating['min_age'])) {
- $min_year = $year - $mating['min_age'];
- $min_year_time = strtotime(date($min_year . '-m-d H:i:s'));
- $where[] = ['birthday', '<', $min_year_time];
- }
- if (!empty($mating['max_age'])) {
- $max_year = $year - $mating['max_age'];
- $max_year_time = strtotime(date($max_year . '-m-d H:i:s'));
- $where[] = ['birthday', '>', $max_year_time];
- }
- }
- //身高
- if (in_array('high', $match_field)) {
- if (!empty($mating['min_high'])) {
- $where[] = ['high', '>', $mating['min_high']];
- }
- if (!empty($mating['max_high'])) {
- $where[] = ['high', '<', $mating['max_high']];
- }
- }
- //体重
- if (in_array('weight', $match_field)) {
- if (!empty($mating['min_weight'])) {
- $where[] = ['weight', '>', $mating['min_weight']];
- }
- if (!empty($mating['max_weight'])) {
- $where[] = ['weight', '<', $mating['max_weight']];
- }
- }
- //生肖
- if (in_array('animal', $match_field)) {
- if (!empty($mating['animal'])) {
- foreach ($mating['animal'] as $animal) {
- $where[] = ['animal', '<>', $animal];
- }
- }
- }
- //籍贯
- if (in_array('native', $match_field)) {
- if ($mating['native'] == '晋江籍') {
- $where[] = ['native', 'like', "%晋江%"];
- }
- if ($mating['native'] == '非晋江籍') {
- $where[] = ['native', 'not like', "%晋江%"];
- }
- }
- //学历
- if (in_array('education', $match_field)) {
- if ($mating['education'] == '本科') {
- $where[] = ['education', 'in', ['本科', '硕士', '博士']];
- }
- if ($mating['education'] == '硕士') {
- $where[] = ['education', 'in', ['硕士', '博士']];
- }
- if ($mating['education'] == '博士') {
- $where[] = ['education', '=', '博士'];
- }
- }
- //年收入
- if (in_array('income', $match_field)) {
- if ($mating['income'] == '5-10万') {
- $where[] = ['income', 'in', ['5-10万', '10-20万', '20-30万', '30-50万', '50-100万', '100万以上']];
- }
- if ($mating['income'] == '10-20万') {
- $where[] = ['income', 'in', ['10-20万', '20-30万', '30-50万', '50-100万', '100万以上']];
- }
- if ($mating['income'] == '20-30万') {
- $where[] = ['income', 'in', ['20-30万', '30-50万', '50-100万', '100万以上']];
- }
- if ($mating['income'] == '30-50万') {
- $where[] = ['income', 'in', ['30-50万', '50-100万', '100万以上']];
- }
- if ($mating['income'] == '50-100万') {
- $where[] = ['income', 'in', ['50-100万', '100万以上']];
- }
- if ($mating['income'] == '100万以上') {
- $where[] = ['income', '=', '100万以上'];
- }
- }
- //是否有房
- if (in_array('have_house', $match_field)) {
- if ($mating['have_house'] == 1) {
- $where[] = ['have_house', '=', 1];
- }
- }
- //是否有车
- if (in_array('have_car', $match_field)) {
- if ($mating['have_car'] == 1) {
- $where[] = ['have_car', '=', 1];
- }
- }
- //婚后是否愿意与父母同住
- if (in_array('with_parent_live', $match_field)) {
- if ($mating['with_parent_live'] == 1) {
- $where[] = ['with_parent_live', '=', 1];
- }
- }
- //是否吸烟
- if (in_array('smoke', $match_field)) {
- if ($mating['smoke'] == '接受偶尔') {
- $where[] = ['smoke', 'in', ['社交时偶尔吸烟', '不吸烟,但不反感', '不吸,很反感']];
- }
- if ($mating['smoke'] == '反感') {
- $where[] = ['smoke', 'in', ['不吸,很反感', '不吸烟,但不反感']];
- }
- }
- //是否喝酒
- if (in_array('drink', $match_field)) {
- if ($mating['drink'] == '接受偶尔') {
- $where[] = ['drink', 'in', ['不喝酒', '社交需要喝', '兴致时小酌']];
- }
- if ($mating['drink'] == '反感') {
- $where[] = ['drink', 'in', ['不喝酒']];
- }
- }
- //婚后是否愿意与父母同住
- if (in_array('want_birth', $match_field)) {
- if ($mating['want_birth'] == 1) {
- $where[] = ['want_birth', '=', 1];
- }
- }
- return $where;
- }
- /**
- * 排序
- */
- private function _orderMatchUser($list, $mating)
- {
- //匹配
- foreach ($list as $k => $v) {
- $match_arr = [];
- $match_count = 0;
- //年龄匹配
- $age = Fun::getAgeByBirth($v['birthday']);
- if (empty($mating['min_age']) && empty($mating['max_age'])) {
- $match_arr[] = 'age';
- $match_count++;
- } elseif (empty($mating['min_age'])) {
- if ($age <= $mating['max_age']) {
- $match_arr[] = 'age';
- $match_count++;
- }
- } elseif (empty($mating['max_age'])) {
- if ($age >= $mating['min_age']) {
- $match_arr[] = 'age';
- $match_count++;
- }
- } elseif ($age >= $mating['min_age'] && $age <= $mating['max_age']) {
- $match_arr[] = 'age';
- $match_count++;
- }
- //身高
- if (empty($mating['min_high']) && empty($mating['max_high'])) {
- $match_arr[] = 'high';
- $match_count++;
- } elseif (empty($mating['min_high'])) {
- if ($v['high'] <= $mating['max_high']) {
- $match_arr[] = 'high';
- $match_count++;
- }
- } elseif (empty($mating['max_high'])) {
- if ($v['high'] >= $mating['min_high']) {
- $match_arr[] = 'high';
- $match_count++;
- }
- } elseif ($v['high'] >= $mating['min_high'] && $v['high'] <= $mating['max_high']) {
- $match_arr[] = 'high';
- $match_count++;
- }
- //体重
- if (empty($mating['min_weight']) && empty($mating['max_weight'])) {
- $match_arr[] = 'weight';
- $match_count++;
- } elseif (empty($mating['min_weight'])) {
- if ($v['weight'] <= $mating['max_weight']) {
- $match_arr[] = 'weight';
- $match_count++;
- }
- } elseif (empty($mating['max_weight'])) {
- if ($v['weight'] >= $mating['min_weight']) {
- $match_arr[] = 'weight';
- $match_count++;
- }
- } elseif ($v['weight'] >= $mating['min_weight'] && $v['weight'] <= $mating['max_weight']) {
- $match_arr[] = 'weight';
- $match_count++;
- }
- //生肖
- if (empty($mating['animal'])) {
- $match_arr[] = 'animal';
- $match_count++;
- } else {
- if (!in_array($v['animal'], $mating['animal'])) {
- $match_arr[] = 'animal';
- $match_count++;
- }
- }
- //籍贯 ['晋江籍','非晋江籍','无要求']
- if ($mating['native'] == '无要求') {
- $match_arr[] = 'native';
- $match_count++;
- } elseif ($mating['native'] == '晋江籍') {
- if (strpos($v['native'], '晋江') !== false) {
- $match_arr[] = 'native';
- $match_count++;
- }
- } else {
- if (strpos($v['native'], '晋江') === false) {
- $match_arr[] = 'native';
- $match_count++;
- }
- }
- //学历 ['本科以下','本科','硕士','博士','无要求']
- if ($mating['education'] == '无要求' || $mating['education'] == '本科以下') {
- $match_arr[] = 'education';
- $match_count++;
- } elseif ($mating['education'] == '本科') {
- if (in_array($v['education'], ['本科', '硕士', '博士'])) {
- $match_arr[] = 'education';
- $match_count++;
- }
- } elseif ($mating['education'] == '硕士') {
- if (in_array($v['education'], ['硕士', '博士'])) {
- $match_arr[] = 'education';
- $match_count++;
- }
- } elseif ($mating['education'] == '博士') {
- if ($v['education'] == '博士') {
- $match_arr[] = 'education';
- $match_count++;
- }
- }
- //年收入 ['不限', '5万以下', '5-10万', '10-20万', '20-30万', '30-50万', '50-100万', '100万以上']
- if ($mating['income'] == '不限' || $mating['income'] == '5万以下') {
- $match_arr[] = 'income';
- $match_count++;
- } elseif ($mating['income'] == '5-10万') {
- if (in_array($v['income'], ['5-10万', '10-20万', '20-30万', '30-50万', '50-100万', '100万以上'])) {
- $match_arr[] = 'income';
- $match_count++;
- }
- } elseif ($mating['income'] == '10-20万') {
- if (in_array($v['income'], ['10-20万', '20-30万', '30-50万', '50-100万', '100万以上'])) {
- $match_arr[] = 'income';
- $match_count++;
- }
- } elseif ($mating['income'] == '20-30万') {
- if (in_array($v['income'], ['20-30万', '30-50万', '50-100万', '100万以上'])) {
- $match_arr[] = 'income';
- $match_count++;
- }
- } elseif ($mating['income'] == '30-50万') {
- if (in_array($v['income'], ['30-50万', '50-100万', '100万以上'])) {
- $match_arr[] = 'income';
- $match_count++;
- }
- } elseif ($mating['income'] == '50-100万') {
- if (in_array($v['income'], ['50-100万', '100万以上'])) {
- $match_arr[] = 'income';
- $match_count++;
- }
- } elseif ($mating['income'] == '100万以上') {
- if (in_array($v['income'], ['100万以上'])) {
- $match_arr[] = 'income';
- $match_count++;
- }
- }
- //是否有房 ['不限', '是', '否']
- if ($mating['have_house'] == 1) {
- if ($v['have_house'] == 1) {
- $match_arr[] = 'have_house';
- $match_count++;
- }
- } else {
- $match_arr[] = 'have_house';
- $match_count++;
- }
- //是否有车 ['不限', '是', '否']
- if ($mating['have_car'] == 1) {
- if ($v['have_car'] == 1) {
- $match_arr[] = 'have_car';
- $match_count++;
- }
- } else {
- $match_arr[] = 'have_car';
- $match_count++;
- }
- //是否婚后愿意与父母同住 ['不限', '是', '否']
- if ($mating['with_parent_live'] == 2) {
- if ($v['with_parent_live'] == 2) {
- $match_arr[] = 'with_parent_live';
- $match_count++;
- }
- } else {
- $match_arr[] = 'with_parent_live';
- $match_count++;
- }
- //是否吸烟 ['不反感', '接受偶尔', '反感']
- if ($mating['smoke'] == '不反感' || $mating['smoke'] == '') {
- $match_arr[] = 'smoke';
- $match_count++;
- } elseif ($mating['smoke'] == '接受偶尔') {
- if (in_array($v['smoke'], ['社交时偶尔吸烟', '不吸烟,但不反感', '不吸,很反感'])) {
- $match_arr[] = 'smoke';
- $match_count++;
- }
- } elseif ($mating['smoke'] == '反感') {
- if (in_array($v['smoke'], ['不吸,很反感', '不吸烟,但不反感'])) {
- $match_arr[] = 'smoke';
- $match_count++;
- }
- }
- //是否喝酒 ['不反感', '接受偶尔', '反感']
- if ($mating['drink'] == '不反感' || $mating['drink'] == '') {
- $match_arr[] = 'drink';
- $match_count++;
- } elseif ($mating['drink'] == '接受偶尔') {
- if (in_array($v['drink'], ['不喝酒', '社交需要喝', '兴致时小酌'])) {
- $match_arr[] = 'drink';
- $match_count++;
- }
- } elseif ($mating['drink'] == '反感') {
- if ($v['drink'] == '不喝酒') {
- $match_arr[] = 'drink';
- $match_count++;
- }
- }
- //是否生育
- if ($mating['want_birth'] != 1) {
- $match_arr[] = 'want_birth';
- $match_count++;
- } else {
- if ($v['want_birth'] == 1) {
- $match_arr[] = 'want_birth';
- $match_count++;
- }
- }
- $list[$k]['age'] = $age;
- $list[$k]['match_arr'] = $match_arr;
- $list[$k]['match_count'] = $match_count;
- //姓名
- if (mb_strlen($list[$k]['realname'], 'utf-8') > 1) {
- $list[$k]['realname'] = $this->_replaceSecondChineseCharWithAsterisk($list[$k]['realname']); // 将第二个字符替换为星号
- }
- }
- //排序
- usort($list, function ($a, $b) {
- if ($a['match_count'] < $b['match_count']) {
- return 1;
- } elseif ($a['match_count'] > $b['match_count']) {
- return -1;
- } else {
- return 0;
- }
- });
- //获取前10
- if (count($list) > 10) {
- return array_slice($list, 0, 10);
- } else {
- return $list;
- }
- }
- private function _replaceSecondChineseCharWithAsterisk($string)
- {
- $length = mb_strlen($string, 'utf-8');
- $arr = [];
- for ($i = 0; $i < $length; $i++) {
- $arr[] = mb_substr($string, $i, 1, 'utf-8');
- }
- $arr[1] = '*';
- return implode('', $arr);
- }
- }
|