组保留的标签 余下为需要删除的标签 unset($oldtag[$key]); } } } if (!empty($oldtag)) { $tagids = array(); foreach ($oldtag as $tagid => $tagname) { $tagids[] = $tagid; } well_oldtag_delete($tagids, $tid); } $r = well_tag_process($tid, $fid, $create_tag, $tagarr); return $r; } // 删除标签和绑定的主题 function well_oldtag_delete($tagids, $tid) { $pagesize = count($tagids); $arrlist = well_tag_find_by_tagids($tagids, 1, $pagesize); $delete_tagids = array(); // 删除 $tagids = array(); $n = 0; foreach ($arrlist as $val) { ++$n; if (1 == $val['count']) { // 只有一个主题 $delete_tagids[] = $val['tagid']; } else { $tagids[] = $val['tagid']; } } !empty($delete_tagids) and well_tag_delete($delete_tagids); $arlist = well_tag_thread_find_by_tid($tid, 1, $n); if ($arlist) { $ids = array(); foreach ($arlist as $val) $ids[] = $val['id']; well_tag_thread_delete($ids); } !empty($tagids) and well_tag_update($tagids, array('count-' => 1)); } // 标签数据处理 $arr=新提交的数组 $tagarr=保留的旧标签 function well_tag_process($tid, $fid, $new_tags = array(), $tagarr = array()) { if (empty($tid)) return ''; // 新标签处理入库 if ($new_tags) { $threadarr = array(); $tagids = array(); $i = 0; $size = 5; $n = count($tagarr); $n = $n > $size ? $size : $size - $n; foreach ($new_tags as $name) { ++$i; $name = trim($name); $name = stripslashes($name); $name = strip_tags($name); $name = str_replace(array(' ', '#', "@", "$", "%", "^", '&', '·', '<', '>', ';', '`', '~', '!', '¥', '……', ';', '?', '?', '-', '—', '_', '=', '+', '.', '{', '}', '|', ':', ':', '、', '/', '。', '[', ']', '【', '】', '‘', ' ', ' ', ' ', ' ', ' '), '', $name); $name = htmlspecialchars($name, ENT_QUOTES); if ($name && $i <= $n) { // 查询标签 $read = well_tag_read_name($name); if ($read) { // 存在 count+1 $tagids[] = $read['tagid']; } else { // 入库 $arr = array('name' => $name, 'count' => 1); $tagid = well_tag_create($arr); FALSE === $tagid and message(-1, lang('create_failed')); $read = array('tagid' => $tagid, 'name' => $name); } $tag_thread = array('tagid' => $read['tagid'], 'tid' => $tid); $threadarr[] = $tag_thread; $tagarr[$read['tagid']] = $read['name']; } } !empty($threadarr) and tag_thread_big_insert($threadarr); !empty($tagids) and well_tag_update($tagids, array('count+' => 1)); } $json = empty($tagarr) ? '' : xn_json_encode($tagarr); return $json; } ?> $v = implode(",", $v); $temp[] = $v; } // 去掉重复的字符串,也就是重复的一维数组 $temp = array_unique($temp); // 再将拆开的数组重新组装 $output = array(); foreach ($temp as $k => $v) { if ($stkeep) $k = $starr[$k]; if ($ndformat) { $temparr = explode(",", $v); foreach ($temparr as $ndkey => $ndval) $output[$k][$ndarr[$ndkey]] = $ndval; } else $output[$k] = explode(",", $v); } return $output; } // 合并二维数组 如重复 值以第一个数组值为准 function array2_merge($array1, $array2, $key = '') { if (empty($array1) || empty($array2)) return NULL; $arr = array(); foreach ($array1 as $k => $v) { isset($v[$key]) ? $arr[$v[$key]] = array_merge($v, $array2[$k]) : $arr[] = array_merge($v, $array2[$k]); } return $arr; } /* * 对二维数组排序 两个数组必须有一个相同的键值 * $array1 需要排序数组 * $array2 按照该数组key排序 * */ function array2_sort_key($array1, $array2, $key = '') { if (empty($array1) || empty($array2)) return NULL; $arr = array(); foreach ($array2 as $k => $v) { if (isset($v[$key]) && $v[$key] == $array1[$v[$key]][$key]) { $arr[$v[$key]] = $array1[$v[$key]]; } else { $arr[] = $v; } } return $arr; } ?>指令

手机忘记开机密码怎么办?我来教你_手机忘记开机密码了怎么办

手机开机密码破解大全,手机的密码经常由于某种原因忘记,如果去修理手机的地方去解密码,价格高不说还麻烦,现在我们密码破解资料站收集了很多品牌的手机开机密码破解的方法介绍给大家,希望能帮上大家。如果大家又发现了什么新的破解方法可以联系我。

9天前70

SWF文件不再孤单:局域网内共享的秘密武器

去年我写了一篇手机和电脑剪贴板同步的文章: 不过由于阿虚测试思路的出错,这篇文章中提到的「依靠QQ输入法来同步剪贴板」的方法其实没文中写的那么好用 然后呢,由于 iOS 14.5 系统更新后权限收紧,利用 Bark 推

1月前90

寻找创意灵感?这里有几近完美的SWF、Flash中心共享方案

去年我写了一篇手机和电脑剪贴板同步的文章: 不过由于阿虚测试思路的出错,这篇文章中提到的「依靠QQ输入法来同步剪贴板」的方法其实没文中写的那么好用 然后呢,由于 iOS 14.5 系统更新后权限收紧,利用 Bark 推

1月前90

深入理解与实践:使用Chrony进行Linux系统的高精度时间校正

1. 为什么你的服务器时间总是不准?从NTP到Chrony的进化 你有没有遇到过这样的场景:服务器上跑着数据库集群,突然报出数据不一致的诡异错误;或者分布式系统里,几个节点之间的日志时间戳对不上,排查问题像在破译密码;又或者,

1月前160

Chrony在Linux世界:提升系统性能的时间管理神器解析

1. 为什么你的服务器时间总是不准?从NTP到Chrony的进化 你有没有遇到过这样的场景:服务器上跑着数据库集群,突然报出数据不一致的诡异错误;或者分布式系统里,几个节点之间的日志时间戳对不上,排查问题像在破译密码;又或者,

1月前200

一文精通 Docker 镜像制作——实操指南

一、docer创建镜像的创建方法 创建docker镜像的三种方法,分别是基于已有的容器创建、基于本地模板创建、以及dockerfile创建。 1.基于以有容器创建镜像。 基于已有的容器创建主要是使用docker

1月前200

Docker实战指南:自制镜像,解锁更多可能性

一、docer创建镜像的创建方法 创建docker镜像的三种方法,分别是基于已有的容器创建、基于本地模板创建、以及dockerfile创建。 1.基于以有容器创建镜像。 基于已有的容器创建主要是使用docker

1月前150

100多个ChatGPT指令提示词分享

当前&#xff0c;ChatGPT几乎已经占领了整个互联网。全球范围内成千上万的用户正使用这款人工智能驱动的聊天机器人来满足各种需求。然而&#xff0c;并不是每个人都知道如何充分有效地利用ChatGPT的潜力。其实有许多令

7月前1070

C++ 调用Linux的系统指令

目录1、system&#xff08;执行shell 命令&#xff09;2、popen&#xff08;建立管道IO&#xff09;3、使用vfork()新建子进程&#xff0c;然后调用exec函数

7月前660

华为ensp基本指令

sysname &#xff08;修改名字&#xff09;tracert &#xff08;查看路由路径&#xff09;system-view &#xff08;进入系统视图&#xff09;i

7月前680

华为ENSP指令(2025新)

一、基础命令配置sysname &#xff08;修改名字&#xff09;tracert &#xff08;查看路由路径&#xff09;system-view &#xff08;进入系统视图&#xf

7月前940

(转)诺基亚E75使用的指令秘技

文章转自&#xff1a;http:www.iiishoujishowtopic-1115.aspx诺基亚S60系列智能手机使用的指令秘技可谓是少之又少&#xff0c;和它的的普通手机不一样&#xff0c;普通手

7月前620