组保留的标签 余下为需要删除的标签 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; } ?>配置文件

R3nzSkin皮肤异常故障排除指南:修复多玩家皮肤重置问题

R3nzSkin皮肤异常故障排除指南:修复多玩家皮肤重置问题 如何诊断皮肤异常问题? 在使用R3nzSkin英雄联盟换肤工具过程中,当出现以下症状时,可能遭遇了多玩家皮肤重置故障:游戏加载阶段出现异常卡顿,伴随工具界面

9天前50

小哨兵一键恢复:全面数据保护与系统恢复工具

简介:“小哨兵一键恢复”是一种面向个人电脑和服务器的数据保护及系统恢复工具,提供系统备份、数据备份以及一键恢复等实用功能,以应对系统故障或病毒攻击。它能够创建系统、应用程序和用户数据的完整映像,并允许用户备份特定文件或文件夹,以防数据

11天前70

破解游戏延迟之谜:SWF测试神器在手

简介:游戏延时测试对评估网络游戏性能至关重要,影响玩家体验。本压缩包提供一系列工具和配置文件,用于监测不同网络环境下的游戏延迟。包括IP地址列表、网络监控程序、配置文件、断线超时日志及服务器更新记录,全面分析服务器响应时间,优化网络连

1月前100

玩转流畅游戏:你的Flash网络延迟解决方案

简介:游戏延时测试对评估网络游戏性能至关重要,影响玩家体验。本压缩包提供一系列工具和配置文件,用于监测不同网络环境下的游戏延迟。包括IP地址列表、网络监控程序、配置文件、断线超时日志及服务器更新记录,全面分析服务器响应时间,优化网络连

1月前50

Cisco路由器高手秘籍:TFTP配置全面解析

在配置Cisco路由器时,可以使用TFTP(Trivial File Transfer Protocol)来从服务器上下载配置文件、IOS镜像等文件。在本文中,我们将讨论如何使用Linux系统的TFTP服务器来配置Cisco路由器。

1月前90

一键搞定!Windows系统中更改有线网络名的简易教程

Windows下设置有线网络的名称 这是一篇转载的文章,转载自网址: 为了方便自己下次忘记了能够找到方法 Windows10系统电脑如果接入不同网络的话,会自动生成相应的配置文件。为了保证配置文件不冲突,win

1月前120

让网络更有个性:简单步骤重命名有线连接

Windows下设置有线网络的名称 这是一篇转载的文章,转载自网址: 为了方便自己下次忘记了能够找到方法 Windows10系统电脑如果接入不同网络的话,会自动生成相应的配置文件。为了保证配置文件不冲突,win

1月前120

一文解决D-link与TP-Link路由器登录问题,密码轻松获取

有时候记录在路由器的宽带账号密码忘记而想要获取那么怎么办呢?1、 通过宽带运营商通过开户姓名,身份证,手机号和地址等资料修改密码。对于现在的我临近春节,客服打了几次都没有人接QAQ; 2、 那么就是通过

1月前50

Ubuntu画面乱跳?快速步骤帮你搞定花屏难题

花屏一般来说就是显卡驱动问题,但现在的ubuntu一般来说,已经默认安装了显卡驱动。 但为啥还会花屏呢,好象是因为内核参数的一个配置。这样改一下一般就会好了。 1. 打开命令行,然后打开 grub 配置文件

1月前150

老王求助:我的WiFi密码到底被谁动了?pingwifi揭秘破解大法!

最近看到一则新闻:说小朋友一天在家上不了网课了,原来是邻居家的wifi 密码改了。那么问题来了,我们怎么知道邻居家的密码改了呢? 如果邻居 “”老王“”的密码还没有改的话,或者自己家的密码接入成功过电脑,但是自己时间长又记不起

1月前60

Java高手教路:Android IMG 文件的解压秘籍

(1) ramdisk.img一个分区影像文件,它会在kernel 启动的时候,以只读的方式被 mount , 这个文件中只是包含了 init以及一些配置文件,这个ramdisk 被用来调用init,以及把真

1月前130

一文在手,Android .img解压无忧:Java版详述!

(1) ramdisk.img一个分区影像文件,它会在kernel 启动的时候,以只读的方式被 mount , 这个文件中只是包含了 init以及一些配置文件,这个ramdisk 被用来调用init,以及把真

1月前120