php代码<?php

/**

*MentionModel.class.php

*/

class mentionModel extends Model{

private $userList; //存放最近一次提取到提及用户列表

/**

* 提取@信息,添加链接,并插入mention数据库

* @param $content 需要提取的文本

* @param $isConstructUrl,是否构造url,转发的话不需要再次构造url

* @param $isConstructTag,是否构造Tag

* @return string 返回构造好的文本

*/

public function convertContent($content ,$isConstructUrl = TRUE ,$isConstructTag = TRUE){

$mentionDb = M("mention");

$userDb = M("account_users");

$content = $content.' '; //防止最后有@,后面会去掉

$pattarn = '#@(.*)\s#U';

$match = array();

//获取用户昵称

preg_match_all($pattarn , $content , $match);

//构造查询条件

$userIn = '';

foreach ($match[1] as $matchTemp){

$userIn .= $matchTemp.',';

}

$userIn = substr($userIn, 0 , strlen($userIn)-1);

$map['nicename'] = array('in',$userIn);

//获取对用用户

$this->userList = $userDb->field('account_id,nicename')->where($map)->select();

//合并数组,方便操作

$userListGroup = array();

foreach($this->userList as $userListTemp){

$userListGroup[$userListTemp['account_id']] = $userListTemp['nicename'];

}

//生成替换格式

if($isConstructUrl){

$replaceArr = array();

foreach($userListGroup as $account_id =>$nicename){

$replace = $this->_constructUrl($account_id,$nicename);

$replaceArr += array("@".$nicename.' ' => $replace ); //这里空格也替换

}

//替换

$content = strtr($content,$replaceArr);

}

//标签处理

$tagPattarn = '/#(.*)#/U';

$tagMatch = array();

//是否需要格式化标签

if($isConstructTag && preg_match_all($tagPattarn , $content , $tagMatch) ){

$tagIn = '';

$tagReplacArr = array();

foreach ($tagMatch[1] as $tagTmp){

if($constructTmp = $this->_constructTag($tagTmp)){

$tagReplacArr += array('#'.$tagTmp.'#' => $constructTmp);

}

}

//替换

$content = strtr($content,$tagReplacArr);

}

return $content;

}

/**

* 格式提及用户,格式未定。

* @param $account_id

* @param $nicename

* @return string 返回格式的的用户链接

*/

private function _constructUrl($account_id,$nicename){

return '@'.$nicename.' ';

}

/**

* 格式提及标签,格式未定。

* @param $tagName 标签名

* @return boolean|string 返回格式的的标签

*/

private function _constructTag( $tagName ){

/*不需查询数据库,

$tagDb = M('tages_info ');

$map['cnname'] = $tagName;

$map['enname'] = $tagName;

$map['_logic'] = 'OR';

if(! $tag = $tagDb->where($map)->field("tage_id")->find()){

//没有该标签

return false;

}

*/

return '#' . $tagName . '#';

}

/**

* 添加到提及数据库,暂未完成

*/

public function addToMention($type , $id){

if(! $this->userList || !$type || !$id){

return false;

}

dump($this->userList);

}

}

class TestAction extends Action {

public function index(){

$mentionDb = D("mention");

$content = "#百搭#@ @小红 @小明 @sdfklj @dsf #英伦##英伦##英伦# #english##英伦##sdf#";

//构造content

$content = $mentionDb->convertContent($content , true , true);

echo $content;

//......将分享或评论什么的插入数据库,并获取其id $id与对应类别 $type

$type = 2; //假设类别为2

$id = 1;//假设插入数据库的分享或评论的id为1

$mentionDb->addToMention($type,$id);

}

}

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php类微博源码,类微博功能设计相关推荐

  1. 24 UsageEnvironment使用环境抽象基类——Live555源码阅读(三)UsageEnvironment

    24 UsageEnvironment使用环境抽象基类--Live555源码阅读(三)UsageEnvironment 24 UsageEnvironment使用环境抽象基类--Live555源码阅读 ...

  2. 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )

    文章目录 一.调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 ) 二. 实时调度类 rt_sched_class 源码 一.调度类 ( 停机调度类 | 限期调度 ...

  3. PHP密码生成管理源码,php密码生成类(附源码)

    本节内容: 好用的php 密码生成类. 访代码实现的功能: 1,可设定密码长度. 2,可设定要生成的密码个数,批量生成. 3,可以指定密码的规则,字母,数字,特殊字符等. 1,密码生成类文件 Gene ...

  4. 12 哈希表相关类——Live555源码阅读(一)基本组件类

    12 哈希表相关类--Live555源码阅读(一)基本组件类 这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 ...

  5. php强制cookies,php Cookies操作类(附源码)

    本cookies操作类的功能,包括: 1,保存,读取,更新,清除cookies数据. 2,可设置前缀. 3,强制超时控制. 4,cookies数据可以是字符串,数组,对象等. 1,PHP cookie ...

  6. 飞鸽传书最新源码类都要复杂的多

    实际应用中的飞鸽传书最新源码类都要复杂的多,一旦发生职责扩散而需要修改类时,飞鸽传书 除非这个类本身非常简单,否则还是遵循单一职责原则的好.遵循单一职责原的优点有:可以降低类的复杂度,一个类只负责一项 ...

  7. 工商注册资质代办类网站源码 公司注册类网站织梦模板

    介绍: 工商注册资质代办类网站织梦模板公司注册类网站源码下载 本套织梦模板采用织梦内核开发的模板,这款模板使用范围极广,不仅仅局限于一类型的企业,你只需要把图片和产品内容换成你的即可,颜色都可以修改, ...

  8. hibernate 并发获取session失败 空指针_高并发之|通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程...

    核心逻辑概述 ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态. ThreadPoolExecu ...

  9. 最新好看的自适应手机版软件APP下载类网站源码,游戏软件应用网站源码,自适应手机端Pbootcms模板

    自适应手机软件APP下载类网站源码/游戏软件应用网站源码/自适应手机端 Pbootcms模板 测试环境:Linux  nginx1.18  PHP7.3 下载地址:自适应手机端软件APP下载网站源码 ...

最新文章

  1. CentOS7中使用yum安装Nginx的方法(亲测启动方法)
  2. python ——两个队列实现一个栈两个栈实现一个队列
  3. 泛型那点儿事儿 泛型概述 简单样例代码
  4. php有哪些_php工作原理是什么?php常用功能有哪些?
  5. error超频 whea win10_解决WHEA_UNCORRECTABLE_ERROR蓝屏
  6. clickhouse 部署+介绍
  7. cad填充图案乱理石_「AutoCAD之填充」CAD图案填充的6个要点以及3个墙裂的建议...
  8. 关联分析---Apriori算法和FPGrowth算法挖掘规则计算频繁项间的置信度
  9. python删除表格重复行_python 删除excel表格重复行,数据预处理操作
  10. 【深度学习】DCGAN实现动漫头像生成详细说明
  11. Golang sync.Cond详细理解
  12. asterisk连接sip139网络电话
  13. 文章快速伪原创(怎么快速得到伪原创文章)
  14. Windows系统设置多账户步骤
  15. linux键盘触摸板失灵,linux 中屏幕合上后触摸板无法使用
  16. mysql字段是问号_Mysql数据库中文字段显示问号怎么解决?
  17. 2021年电子合同最新政策汇总,29项举措鼓励各行业推广应用
  18. 第K短路(A*算法)
  19. 计算机开根号原理,根号的原理_怎么开的根号,有原理吗
  20. Vue报错------did you register the component correctly? For recursive components, make sure to provide

热门文章

  1. map() 与 nest.map_structure() 的区别及用法
  2. Day4:html和css
  3. Windows2008|2003超出最大连接数
  4. HDU 5427 A problem of sorting 水题
  5. 正则提取 html 里input 标记的value 值
  6. 设置返回IOS开发(26)之UITableView的页眉和页脚
  7. Csharp develop
  8. iOS精品源码,GHConsole图片浏览器圆形进度条音视频传输连击礼物弹出动画
  9. IBatis的resultMap使用
  10. eclipse远程调试两种模式