<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>北漂的女孩</title><link>http://lhj.vqilu.cn/</link><description>Good Luck To You!</description><item><title>go携程算法：1-120万数里面的素数</title><link>http://lhj.vqilu.cn/?id=187</link><description>&lt;p&gt;没有面试就在家学习学习吧，万一遇见合适的，一次就面试成功&lt;/p&gt;&lt;p&gt;思路图：&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/06/202406061717664680175641.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 691px; height: 527px;&quot; width=&quot;691&quot; height=&quot;527&quot;/&gt;&lt;/p&gt;&lt;p&gt;程序算法：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-go&quot;&gt;package&amp;nbsp;main

import&amp;nbsp;(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;fmt&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;sync&amp;quot;
)

var&amp;nbsp;wg&amp;nbsp;sync.WaitGroup

func&amp;nbsp;main()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//存入12万数据&amp;nbsp;测试的可以少些
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ichan&amp;nbsp;:=&amp;nbsp;make(chan&amp;nbsp;int,&amp;nbsp;1000)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//12数据的素数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pchan&amp;nbsp;:=&amp;nbsp;make(chan&amp;nbsp;int,&amp;nbsp;1000)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//判断chan是否可以关闭
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exitchan&amp;nbsp;:=&amp;nbsp;make(chan&amp;nbsp;bool,&amp;nbsp;16)&amp;nbsp;//标识chan&amp;nbsp;结束

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wg.Add(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n&amp;nbsp;:=&amp;nbsp;100
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;go&amp;nbsp;putNumber(ichan,&amp;nbsp;n)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//判断12万数据店里面的素数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;:=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;16;&amp;nbsp;i++&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wg.Add(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;go&amp;nbsp;pNumber(ichan,&amp;nbsp;pchan,&amp;nbsp;exitchan)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//打印素数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wg.Add(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;go&amp;nbsp;fmtNumber(pchan)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//因为判断素数开启了16个协程，不能直接在方法里面关闭，需要判断是否可以关闭
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wg.Add(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//关闭协程
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;go&amp;nbsp;func()&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;:=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;16;&amp;nbsp;i++&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;-exitchan
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//关闭pchan
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;close(pchan)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wg.Done()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wg.Wait()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fmt.Println(&amp;quot;结束数据&amp;quot;)
}

//&amp;nbsp;2-n的所有数据&amp;nbsp;&amp;nbsp;写入ichan
func&amp;nbsp;putNumber(ichan&amp;nbsp;chan&amp;nbsp;int,&amp;nbsp;n&amp;nbsp;int)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;:=&amp;nbsp;2;&amp;nbsp;i&amp;nbsp;&amp;lt;=&amp;nbsp;n;&amp;nbsp;i++&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ichan&amp;nbsp;&amp;lt;-&amp;nbsp;i
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;close(ichan)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wg.Done()
}

//&amp;nbsp;ichan里面取值，判断是不是素数
func&amp;nbsp;pNumber(ichan&amp;nbsp;chan&amp;nbsp;int,&amp;nbsp;pchan&amp;nbsp;chan&amp;nbsp;int,&amp;nbsp;exitchan&amp;nbsp;chan&amp;nbsp;bool)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;val&amp;nbsp;:=&amp;nbsp;range&amp;nbsp;ichan&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;flag&amp;nbsp;=&amp;nbsp;true
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;:=&amp;nbsp;2;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;val;&amp;nbsp;i++&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;val%i&amp;nbsp;==&amp;nbsp;0&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;flag&amp;nbsp;=&amp;nbsp;false
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;flag&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pchan&amp;nbsp;&amp;lt;-&amp;nbsp;val
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wg.Done()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//多个协程什么时候关闭chan，不能直接关闭，因为开16个协程，所以需要判断在去关闭
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//close(pchan)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//新加一个管道，用来记录协程挂你
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exitchan&amp;nbsp;&amp;lt;-&amp;nbsp;true
}

//&amp;nbsp;输出素数
func&amp;nbsp;fmtNumber(pchan&amp;nbsp;chan&amp;nbsp;int)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;num&amp;nbsp;:=&amp;nbsp;range&amp;nbsp;pchan&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fmt.Println(num)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wg.Done()
}&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Thu, 06 Jun 2024 11:43:14 +0800</pubDate></item><item><title>linux 搭建docker</title><link>http://lhj.vqilu.cn/?id=186</link><description>&lt;p&gt;公司开始尝试用php转换成golang，由于投资的原因，我们又被迫离职了，现在出来找工作，都在问熟练使用docker等，反正不好找工作那就自己在家学习一下docker吧。&lt;/p&gt;&lt;ol class=&quot;custom_cn list-paddingleft-1&quot; style=&quot;list-style-type: cn;&quot;&gt;&lt;li class=&quot;list-cn-1-1 list-cn-paddingleft-1&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;docker是什么？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;其实docker是linux容器的一种封装方式，提供了简单易用的使用接口。Docker将应用程序与该程序的依赖，打包在一个文件里面，运行这个文件，就会生成一个虚拟容器，程序在这个虚拟容器里面运行，就好像在真是的物理机上运行一样，有了docker，就不用担心环境问题啊。&lt;/p&gt;&lt;p&gt;总体来讲，docker的接口相当简单，用户可以方便的创建和使用容器，把自己的应用放如容器，容器可以进行版本控制、复制、分享、修改，就像管理普通的代码一样。&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;list-cn-1-2 list-cn-paddingleft-1&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;docker的用途&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul style=&quot;list-style-type: disc;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: 16px;&quot;&gt;提供了一次性的环境。&lt;span style=&quot;font-size: 14px;&quot;&gt;本地测试他人软件、持续集成的时候提供单元测试和构建环境。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: 16px;&quot;&gt;提供了弹性的云服务。&lt;span style=&quot;font-size: 14px;&quot;&gt;docker容器可以随开随关，很适合动态扩容和缩容。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;font-size: 16px;&quot;&gt;组建微服务架构。&lt;span style=&quot;font-size: 14px;&quot;&gt;通过多个容器，一台服务器上可以跑多个服务，因此本机就可以虚拟出微服务架构&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol class=&quot;custom_cn list-paddingleft-1&quot; style=&quot;list-style-type: cn;&quot;&gt;&lt;li class=&quot;list-cn-1-1 list-cn-paddingleft-1&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;docker的安装&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;学习安装的地址：&lt;span style=&quot;font-size: 18px;&quot;&gt;https://docs.docker.com/engine/install/centos/&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 注意：linux安装docker,内核版本要求在3.10及以上，可以用命令查看内核版本，uname -r&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405291716973093192597.png&quot; alt=&quot;图片.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 安装docker&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yum -y installed docker &lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可能遇见的报错：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405291716990161734086.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 719px; height: 345px;&quot; width=&quot;719&quot; height=&quot;345&quot;/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 以前可能安装过docker，有版本的冲突，查找安装的docker包，并删除：查找命令&amp;nbsp; yum list installed | grep docker&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405291716990256320384.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 769px; height: 211px;&quot; width=&quot;769&quot; height=&quot;211&quot;/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 移除命令：yum -y remove&amp;nbsp;&amp;nbsp; containerd.io.x86_64&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 安装docker&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yum -y install docker&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 启动docker:&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405301717058379281850.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 805px; height: 525px;&quot; width=&quot;805&quot; height=&quot;525&quot;/&gt;&lt;/p&gt;&lt;p&gt;docker启动失败：&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405301717058450673358.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 813px; height: 114px;&quot; width=&quot;813&quot; height=&quot;114&quot;/&gt;&lt;/p&gt;&lt;p&gt;docker的版本太低了，安装docker-ce&lt;/p&gt;&lt;p&gt;移除所有docker相关的信息&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405301717058794476054.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 836px; height: 226px;&quot; width=&quot;836&quot; height=&quot;226&quot;/&gt;&lt;/p&gt;&lt;p&gt;安装docker-ce&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405301717058728629535.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 802px; height: 358px;&quot; width=&quot;802&quot; height=&quot;358&quot;/&gt;&lt;/p&gt;&lt;p&gt;安装完毕，启动docker&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405301717058899120191.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 782px; height: 390px;&quot; width=&quot;782&quot; height=&quot;390&quot;/&gt;&lt;/p&gt;&lt;p&gt;docker-ce 安装方法地址：&lt;a href=&quot;https://developer.aliyun.com/mirror/docker-ce&quot; _src=&quot;https://developer.aliyun.com/mirror/docker-ce&quot;&gt;https://developer.aliyun.com/mirror/docker-ce&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;docker&amp;nbsp;&amp;nbsp; 镜像的地址：&amp;nbsp; &lt;a href=&quot;https://developer.aliyun.com/mirror/&quot; _src=&quot;https://developer.aliyun.com/mirror/&quot;&gt;https://developer.aliyun.com/mirror/&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;ol class=&quot;custom_num list-paddingleft-1&quot; style=&quot;list-style-type: num;&quot;&gt;&lt;li class=&quot;list-num-1-1 list-num-paddingleft-1&quot;&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 20px;&quot;&gt;镜像的命令学习和方法&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;获取镜像：本地构建&amp;nbsp; docker build&amp;nbsp;&amp;nbsp;&amp;nbsp; 拉去镜像 docker pull 镜像名称&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;查看镜像：docker images&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;删除镜像：docker rmi 镜像名称、镜像id&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;推送镜像：docker push 镜像名称&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;导出镜像：docker save -o 文件名.tar 镜像名称&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;加载镜像：docker load -i 文件名.tar&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;加载镜像：docker load -i -q 文件名.tar（不输出日志）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;查看镜像：&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405301717059399566224.png&quot; alt=&quot;图片.png&quot;/&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;拉去镜像：例如mysql5.7&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405301717059449778158.png&quot; alt=&quot;图片.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;将mysql5.7镜像进行压包&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405301717059865190825.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 771px; height: 223px;&quot; width=&quot;771&quot; height=&quot;223&quot;/&gt;&lt;/p&gt;&lt;p&gt;删除镜像&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405301717059908887049.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 786px; height: 435px;&quot; width=&quot;786&quot; height=&quot;435&quot;/&gt;&lt;/p&gt;&lt;p&gt;加载本地镜像&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2024/05/202405301717059989265416.png&quot; alt=&quot;图片.png&quot; style=&quot;width: 801px; height: 242px;&quot; width=&quot;801&quot; height=&quot;242&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: 20px;&quot;&gt;容器的命令学习&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 29 May 2024 16:28:19 +0800</pubDate></item><item><title>雪花算法id生成器</title><link>http://lhj.vqilu.cn/?id=184</link><description>&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;&amp;lt;?php
/**
&amp;nbsp;*&amp;nbsp;Created&amp;nbsp;by&amp;nbsp;PhpStorm.
&amp;nbsp;*&amp;nbsp;User:&amp;nbsp;lhj
&amp;nbsp;*&amp;nbsp;Date:&amp;nbsp;2020/11/18
&amp;nbsp;*&amp;nbsp;Time:&amp;nbsp;9:39
&amp;nbsp;*/
/**
&amp;nbsp;*&amp;nbsp;雪花算法id生成器
&amp;nbsp;*&amp;nbsp;Class&amp;nbsp;SnowFlake
&amp;nbsp;*&amp;nbsp;@package&amp;nbsp;app\base\utils
&amp;nbsp;*&amp;nbsp;@author&amp;nbsp;lhj
&amp;nbsp;*/
class&amp;nbsp;IdGenerator
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;EPOCH&amp;nbsp;=&amp;nbsp;1479533469598;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//开始时间,固定一个小于当前时间的毫秒数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;max12bit&amp;nbsp;=&amp;nbsp;4095;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;max41bit&amp;nbsp;=&amp;nbsp;1099511627775;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;MACHINEID&amp;nbsp;=&amp;nbsp;&amp;quot;machineId&amp;quot;;&amp;nbsp;&amp;nbsp;//配置里的机器id的key

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;static&amp;nbsp;$machineId&amp;nbsp;=&amp;nbsp;null;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;机器id
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;static&amp;nbsp;$orderNumber&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//设置机器id
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;setMachineId($mId&amp;nbsp;=&amp;nbsp;0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self::$machineId&amp;nbsp;=&amp;nbsp;$mId;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//获取机器id
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;getMachineId()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;self::$machineId;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//生成id

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;createOnlyId($needOrder&amp;nbsp;=&amp;nbsp;true,&amp;nbsp;$mId&amp;nbsp;=&amp;nbsp;0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;时间戳&amp;nbsp;42字节
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$time&amp;nbsp;=&amp;nbsp;floor(microtime(true)&amp;nbsp;*&amp;nbsp;1000);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;当前时间&amp;nbsp;与&amp;nbsp;开始时间&amp;nbsp;差值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$time&amp;nbsp;-=&amp;nbsp;self::EPOCH;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;二进制的&amp;nbsp;毫秒级时间戳
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$base&amp;nbsp;=&amp;nbsp;decbin(self::max41bit&amp;nbsp;+&amp;nbsp;$time);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;机器id&amp;nbsp;&amp;nbsp;10&amp;nbsp;字节

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!self::$machineId)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self::$machineId&amp;nbsp;=&amp;nbsp;config(self::MACHINEID);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($mId)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$machineNumberId&amp;nbsp;=&amp;nbsp;$mId;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$machineNumberId&amp;nbsp;=&amp;nbsp;self::$machineId;


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$machineid&amp;nbsp;=&amp;nbsp;str_pad(decbin($machineNumberId),&amp;nbsp;10,&amp;nbsp;&amp;quot;0&amp;quot;,&amp;nbsp;STR_PAD_LEFT);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$randNumber&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($needOrder)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self::$orderNumber&amp;nbsp;=&amp;nbsp;self::$orderNumber&amp;nbsp;&amp;lt;&amp;nbsp;self::max12bit?&amp;nbsp;self::$orderNumber&amp;nbsp;+&amp;nbsp;1&amp;nbsp;:&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$randNumber&amp;nbsp;=&amp;nbsp;self::$orderNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self::$orderNumber&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$randNumber&amp;nbsp;=&amp;nbsp;mt_rand(0,&amp;nbsp;self::max12bit);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;序列数&amp;nbsp;12字节
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$random&amp;nbsp;=&amp;nbsp;str_pad(decbin($randNumber),&amp;nbsp;12,&amp;nbsp;&amp;quot;0&amp;quot;,&amp;nbsp;STR_PAD_LEFT);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;拼接
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$base&amp;nbsp;=&amp;nbsp;$base.$machineid.$random;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;转化为&amp;nbsp;十进制&amp;nbsp;返回
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;bindec($base);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 10 Jun 2022 15:09:59 +0800</pubDate></item><item><title>无线递归获取标签</title><link>http://lhj.vqilu.cn/?id=183</link><description>&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;&amp;lt;?php

$tags&amp;nbsp;=&amp;nbsp;&amp;#39;[{&amp;quot;TagId&amp;quot;:&amp;quot;5297739878417567745&amp;quot;,&amp;quot;TagName&amp;quot;:&amp;quot;器械&amp;quot;,&amp;quot;Icon&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;TagPid&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;TagPath&amp;quot;:&amp;quot;\/&amp;quot;,&amp;quot;Selected&amp;quot;:0,&amp;quot;Child&amp;quot;:[{&amp;quot;TagId&amp;quot;:&amp;quot;5297739991856713729&amp;quot;,
&amp;quot;TagName&amp;quot;:&amp;quot;瑜伽球&amp;quot;,&amp;quot;Icon&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;TagPid&amp;quot;:&amp;quot;5297739878417567745&amp;quot;,&amp;quot;TagPath&amp;quot;:&amp;quot;\/5297739878417567745&amp;quot;,&amp;quot;Selected&amp;quot;:1,&amp;quot;Child&amp;quot;:[]},{&amp;quot;TagId&amp;quot;:&amp;quot;5297739939595685889&amp;quot;,
&amp;quot;TagName&amp;quot;:&amp;quot;哑铃&amp;quot;,&amp;quot;Icon&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;TagPid&amp;quot;:&amp;quot;5297739878417567745&amp;quot;,&amp;quot;TagPath&amp;quot;:&amp;quot;\/5297739878417567745&amp;quot;,&amp;quot;Selected&amp;quot;:1,&amp;quot;Child&amp;quot;:[]}]},
{&amp;quot;TagId&amp;quot;:&amp;quot;5285677198231998465&amp;quot;,&amp;quot;TagName&amp;quot;:&amp;quot;课件类型标签&amp;quot;,&amp;quot;Icon&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;TagPid&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;TagPath&amp;quot;:&amp;quot;\/&amp;quot;,&amp;quot;Selected&amp;quot;:0,
&amp;quot;Child&amp;quot;:[{&amp;quot;TagId&amp;quot;:&amp;quot;5285678117011066881&amp;quot;,&amp;quot;TagName&amp;quot;:&amp;quot;训练目的&amp;quot;,&amp;quot;Icon&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;TagPid&amp;quot;:&amp;quot;5285677198231998465&amp;quot;,&amp;quot;TagPath&amp;quot;:&amp;quot;\/5285677198231998465&amp;quot;,
&amp;quot;Selected&amp;quot;:0,&amp;quot;Child&amp;quot;:[{&amp;quot;TagId&amp;quot;:&amp;quot;5304964691385126913&amp;quot;,&amp;quot;TagName&amp;quot;:&amp;quot;强化躯干力量和核心力量&amp;quot;,&amp;quot;Icon&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;TagPid&amp;quot;:&amp;quot;5285678117011066881&amp;quot;,
&amp;quot;TagPath&amp;quot;:&amp;quot;\/5285677198231998465\/5285678117011066881&amp;quot;,&amp;quot;Selected&amp;quot;:1,&amp;quot;Child&amp;quot;:[]}]}]}]&amp;#39;;

/**
&amp;nbsp;*&amp;nbsp;根据config算法匹配标签
&amp;nbsp;*&amp;nbsp;depth&amp;nbsp;:&amp;nbsp;匹配节点所在深度。
&amp;nbsp;*&amp;nbsp;matchMethod&amp;nbsp;:&amp;nbsp;匹配方式。
&amp;nbsp;*&amp;nbsp;name&amp;nbsp;:&amp;nbsp;匹配字符
&amp;nbsp;*&amp;nbsp;show&amp;nbsp;:&amp;nbsp;是否展示全路径，check&amp;nbsp;:只显示选中一个节点，checkAll：显示所有路径上的节点（从depth&amp;nbsp;深度&amp;nbsp;节点开始）
&amp;nbsp;*/
&amp;nbsp;*&amp;nbsp;&amp;#39;app_tags&amp;#39;=&amp;gt;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;queue&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[[&amp;#39;depth&amp;#39;=&amp;gt;1,&amp;#39;matchMethod&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;part&amp;#39;,&amp;#39;name&amp;#39;=&amp;gt;&amp;#39;队列&amp;#39;,&amp;#39;show&amp;#39;=&amp;gt;&amp;#39;checkAll&amp;#39;]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;target&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[[&amp;#39;depth&amp;#39;=&amp;gt;1,&amp;#39;matchMethod&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;part&amp;#39;,&amp;#39;name&amp;#39;=&amp;gt;&amp;#39;训练目的&amp;#39;,&amp;#39;show&amp;#39;=&amp;gt;&amp;#39;check&amp;#39;]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;instrument&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[[&amp;#39;depth&amp;#39;=&amp;gt;0,&amp;#39;matchMethod&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;part&amp;#39;,&amp;#39;name&amp;#39;=&amp;gt;&amp;#39;器械&amp;#39;,&amp;#39;show&amp;#39;=&amp;gt;&amp;#39;checkAll&amp;#39;]],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;showTag&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;depth&amp;#39;=&amp;gt;1,&amp;#39;matchMethod&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;part&amp;#39;,&amp;#39;name&amp;#39;=&amp;gt;&amp;#39;心率&amp;#39;,&amp;#39;show&amp;#39;=&amp;gt;&amp;#39;checkAll&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;depth&amp;#39;=&amp;gt;1,&amp;#39;matchMethod&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;part&amp;#39;,&amp;#39;name&amp;#39;=&amp;gt;&amp;#39;消耗&amp;#39;,&amp;#39;show&amp;#39;=&amp;gt;&amp;#39;checkAll&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;depth&amp;#39;=&amp;gt;1,&amp;#39;matchMethod&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;part&amp;#39;,&amp;#39;name&amp;#39;=&amp;gt;&amp;#39;适用水平&amp;#39;,&amp;#39;show&amp;#39;=&amp;gt;&amp;#39;checkAll&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;depth&amp;#39;=&amp;gt;1,&amp;#39;matchMethod&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;part&amp;#39;,&amp;#39;name&amp;#39;=&amp;gt;&amp;#39;强度&amp;#39;,&amp;#39;show&amp;#39;=&amp;gt;&amp;#39;checkAll&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;depth&amp;#39;=&amp;gt;1,&amp;#39;matchMethod&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;part&amp;#39;,&amp;#39;name&amp;#39;=&amp;gt;&amp;#39;类别&amp;#39;,&amp;#39;show&amp;#39;=&amp;gt;&amp;#39;checkAll&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
],
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;[type]&amp;nbsp;$tags
&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;void
&amp;nbsp;*&amp;nbsp;@Author&amp;nbsp;lianghuiju@aocyun.com
&amp;nbsp;*&amp;nbsp;@DateTime&amp;nbsp;2022-01-12
&amp;nbsp;*/
public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;matchTags($tags,$matchKey&amp;nbsp;=&amp;nbsp;&amp;#39;app_tags&amp;#39;,&amp;nbsp;$join&amp;nbsp;=&amp;nbsp;true,&amp;nbsp;$joinStr&amp;nbsp;=&amp;nbsp;&amp;#39;、&amp;#39;)
{&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$algorithm&amp;nbsp;=&amp;nbsp;config($matchKey)&amp;nbsp;??&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($algorithm){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach($algorithm&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$al){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$key]&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ret&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$match&amp;nbsp;=&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$depth&amp;nbsp;=&amp;nbsp;0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ret&amp;nbsp;=&amp;nbsp;self::recursion_tags($tags,$al,$depth,$ret,$match);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($join&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;is_array($ret)){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach($ret&amp;nbsp;as&amp;nbsp;$a=&amp;gt;$r){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ret[$a]&amp;nbsp;=&amp;nbsp;implode($joinStr,$r);&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(is_array($ret))&amp;nbsp;$ret&amp;nbsp;=&amp;nbsp;array_values($ret);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$key]&amp;nbsp;=&amp;nbsp;$ret;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$result;
}
/**
&amp;nbsp;*&amp;nbsp;递归调用
&amp;nbsp;*
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;[type]&amp;nbsp;$tags
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;[type]&amp;nbsp;$algorithm
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;[type]&amp;nbsp;$depth
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;[type]&amp;nbsp;$result
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;boolean&amp;nbsp;$match
&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;void
&amp;nbsp;*&amp;nbsp;@Author&amp;nbsp;&amp;nbsp;lianghuiju@aocyun.com
&amp;nbsp;*&amp;nbsp;@DateTime&amp;nbsp;2022-01-12
&amp;nbsp;*/
public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;recursion_tags($tags,&amp;nbsp;$algorithm,&amp;nbsp;$depth,&amp;nbsp;$result,&amp;nbsp;$match&amp;nbsp;=&amp;nbsp;false,&amp;nbsp;$matchName&amp;nbsp;=&amp;nbsp;false)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach($tags&amp;nbsp;as&amp;nbsp;$k&amp;nbsp;=&amp;gt;&amp;nbsp;$tag){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ret&amp;nbsp;=&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$matchMethod&amp;nbsp;=&amp;nbsp;&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$name&amp;nbsp;=&amp;nbsp;&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$show&amp;nbsp;=&amp;nbsp;&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$dep&amp;nbsp;=&amp;nbsp;&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$mName&amp;nbsp;=&amp;nbsp;$matchName;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$algo&amp;nbsp;=&amp;nbsp;$algorithm;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach($algorithm&amp;nbsp;as&amp;nbsp;$k=&amp;gt;$al){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$matchMethod&amp;nbsp;=&amp;nbsp;$al[&amp;#39;matchMethod&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$name&amp;nbsp;=&amp;nbsp;$al[&amp;#39;name&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$show&amp;nbsp;=&amp;nbsp;$al[&amp;#39;show&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$dep&amp;nbsp;=&amp;nbsp;$al[&amp;#39;depth&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;$depth&amp;nbsp;==&amp;nbsp;$dep){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($matchMethod&amp;nbsp;==&amp;nbsp;&amp;#39;part&amp;#39;){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ret&amp;nbsp;=&amp;nbsp;strstr($tag[&amp;#39;TagName&amp;#39;],$name)&amp;nbsp;===&amp;nbsp;false&amp;nbsp;?&amp;nbsp;false&amp;nbsp;:&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}else&amp;nbsp;if($matchMethod&amp;nbsp;==&amp;nbsp;&amp;#39;all&amp;#39;){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ret&amp;nbsp;=&amp;nbsp;strcmp($tag[&amp;#39;TagName&amp;#39;],$name)&amp;nbsp;===&amp;nbsp;0&amp;nbsp;?&amp;nbsp;true&amp;nbsp;:&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($ret)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$match&amp;nbsp;=&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$algo&amp;nbsp;=&amp;nbsp;[$al];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$mName&amp;nbsp;=&amp;nbsp;$k;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;&amp;nbsp;$match&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;$mName&amp;nbsp;!==&amp;nbsp;false&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;(&amp;nbsp;($show&amp;nbsp;==&amp;nbsp;&amp;#39;check&amp;#39;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;$tag[&amp;#39;Selected&amp;#39;])&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;||&amp;nbsp;($show&amp;nbsp;==&amp;nbsp;&amp;#39;checkAll&amp;#39;)&amp;nbsp;)&amp;nbsp;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$mName][]&amp;nbsp;=&amp;nbsp;$tag[&amp;#39;TagName&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;!empty($tag[&amp;#39;Child&amp;#39;])&amp;nbsp;){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;self::recursion_tags($tag[&amp;#39;Child&amp;#39;],&amp;nbsp;$algo,&amp;nbsp;$depth&amp;nbsp;+&amp;nbsp;1,&amp;nbsp;$result,&amp;nbsp;$match,&amp;nbsp;$mName);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$result;
}&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 16 Feb 2022 16:55:19 +0800</pubDate></item><item><title>ffmpeg脚本学习</title><link>http://lhj.vqilu.cn/?id=182</link><description>&lt;p&gt;&lt;strong&gt;一、简单的操作&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;对于 MPEG 格式的视频，可以直接连接：视频尺寸要一致&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;concat:&amp;quot;1.mpg|2.mpg|3.mpg&amp;quot;&amp;nbsp;-c&amp;nbsp;copy&amp;nbsp;output.mp4&lt;/pre&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;对于非 MPEG 格式容器，但是是 MPEG 编码器（H.264、DivX、XviD、MPEG4、MPEG2、AAC、MP2、MP3 等），&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;可以包装进 TS 格式的容器再合并。在新浪视频，有很多视频使用 H.264 编码器，可以采用这个方法(视频尺寸可以不一致)&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;视频合并&amp;nbsp; 素材.mp4 逐个转化为&amp;nbsp; 素材.ts&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;1.mp4&amp;nbsp;-c&amp;nbsp;copy&amp;nbsp;-bsf:v&amp;nbsp;h264_mp4toannexb&amp;nbsp;-f&amp;nbsp;mpegts&amp;nbsp;1.ts
ffmpeg&amp;nbsp;-i&amp;nbsp;2.mp4&amp;nbsp;-c&amp;nbsp;copy&amp;nbsp;-bsf:v&amp;nbsp;h264_mp4toannexb&amp;nbsp;-f&amp;nbsp;mpegts&amp;nbsp;2.ts
ffmpeg&amp;nbsp;-i&amp;nbsp;3.mp4&amp;nbsp;-c&amp;nbsp;copy&amp;nbsp;-bsf:v&amp;nbsp;h264_mp4toannexb&amp;nbsp;-f&amp;nbsp;mpegts&amp;nbsp;3.ts&lt;/pre&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;将1.ts，2.ts，3.ts 合成mp4。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;&amp;quot;concat:1.ts|2.ts|3.ts&amp;quot;&amp;nbsp;-c&amp;nbsp;copy&amp;nbsp;-bsf:a&amp;nbsp;aac_adtstoasc&amp;nbsp;-movflags&amp;nbsp;+faststart&amp;nbsp;ts.mp4&lt;/pre&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;截取从第02:53开始后的10分02秒的长度的视频（CPU计算较慢，尝试使用GPU CUDA加速报错，待尝试）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-ss&amp;nbsp;00:02:53&amp;nbsp;-vsync&amp;nbsp;0&amp;nbsp;-t&amp;nbsp;00:10:01&amp;nbsp;-i&amp;nbsp;ts.mp4&amp;nbsp;&amp;nbsp;&amp;nbsp;out.mp4&lt;/pre&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;用audio音频替换video中的音频&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;1.mp4&amp;nbsp;-i&amp;nbsp;1.mp3-c:v&amp;nbsp;copy&amp;nbsp;-c:a&amp;nbsp;aac&amp;nbsp;-strict&amp;nbsp;experimental&amp;nbsp;-map&amp;nbsp;0:v:0&amp;nbsp;-map&amp;nbsp;1:a:0&amp;nbsp;output.mp4&lt;/pre&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;用audio音频和video中的音频混声&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;text.mp4&amp;nbsp;-stream_loop&amp;nbsp;-1&amp;nbsp;-i&amp;nbsp;4.mp3&amp;nbsp;-filter_complex&amp;nbsp;[0:a][1:a]amix&amp;nbsp;-t&amp;nbsp;60&amp;nbsp;-y&amp;nbsp;hun.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;strong&gt;二、FFmpeg concat 分离器&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这种方法成功率很高，也是最好的，但是需要 FFmpeg 1.1 以上版本。先创建一个文本文件filelist.txt：&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; file &amp;#39;input1.mkv&amp;#39;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; file &amp;#39;input2.mkv&amp;#39;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; file &amp;#39;input3.mkv&amp;#39;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 然后：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-f&amp;nbsp;concat&amp;nbsp;-i&amp;nbsp;filelist.txt&amp;nbsp;-c&amp;nbsp;copy&amp;nbsp;output.mkv&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&lt;span style=&quot;background-color: #FFC000;&quot;&gt; 注意：使用 FFmpeg concat 分离器时，如果文件名有奇怪的字符，要在 filelist.txt 中转义&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;background-color: #FFC000;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 测试了一下，不同尺寸的视频可以正常合成，但是不同格式的合成有问题&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;strong&gt;三、使用concat滤镜（filter）进行视频文件的合并：&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;&amp;nbsp;ffmpeg&amp;nbsp;-i&amp;nbsp;1.mp4&amp;nbsp;-i&amp;nbsp;2.mp4&amp;nbsp;-i&amp;nbsp;3.mp4&amp;nbsp;-filter_complex&amp;nbsp;&amp;#39;[0:0]&amp;nbsp;[0:1]&amp;nbsp;[1:0]&amp;nbsp;[1:1]&amp;nbsp;[2:0]&amp;nbsp;[2:1]&amp;nbsp;concat=n=3:v=1:a=1&amp;nbsp;[v]&amp;nbsp;[a]&amp;#39;&amp;nbsp;-map&amp;nbsp;&amp;#39;[v]&amp;#39;&amp;nbsp;-map&amp;nbsp;&amp;#39;[a]’&amp;nbsp;&amp;nbsp;output.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 上面的命令合并了三种不同格式的文件，FFmpeg concat 过滤器会重新编码它们。注意这是有损压缩。&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [0:0] [0:1] [1:0] [1:1] [2:0] [2:1] 分别表示第一个输入文件的视频、音频、第二个输入文件的视频、音频、第三个输入文件的视频、音频。&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp; &amp;nbsp; concat=n=3:v=1:a=1 表示有三个输入文件，输出一条视频流和一条音频流。&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[v] [a] 就是得到的视频流和音频流的名字，注意在 bash 等 shell 中需要用引号，防止通配符扩展。&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;音频拼接&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;&amp;quot;concat:3.mp3|4.mp3&amp;quot;&amp;nbsp;-acodec&amp;nbsp;copy&amp;nbsp;third.mp3&amp;nbsp;(3格式和4保持一致)&lt;/pre&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;音频拼接&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;&amp;quot;concat:first.mp3|second.mp3&amp;quot;&amp;nbsp;-i&amp;nbsp;second.mp3&amp;nbsp;-acodec&amp;nbsp;copy&amp;nbsp;test.mp3&amp;nbsp;-map_metadata&amp;nbsp;0:1&amp;nbsp;&amp;nbsp;(third格式和second保持一致)&lt;/pre&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;音视频混合，不调整音量&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;1.mp4&amp;nbsp;-i&amp;nbsp;3.mp3&amp;nbsp;-c:v&amp;nbsp;copy&amp;nbsp;-map&amp;nbsp;0:v:0&amp;nbsp;-filter_complex&amp;nbsp;&amp;quot;[0:a][1:a]amerge=inputs=2[aout]&amp;quot;&amp;nbsp;-map&amp;nbsp;&amp;quot;[aout]&amp;quot;&amp;nbsp;-ac&amp;nbsp;2&amp;nbsp;&amp;nbsp;mix_amerge.mp4&lt;/pre&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;音频混合，调整第1个音频的音量和第2个音频的音量&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;3.mp3&amp;nbsp;-i&amp;nbsp;4.mp3&amp;nbsp;-filter_complex&amp;nbsp;&amp;quot;[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a0];&amp;nbsp;
[1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.9[a1];&amp;nbsp;[a0][a1]amerge=inputs=2[aout]&amp;quot;&amp;nbsp;
-map&amp;nbsp;&amp;quot;[aout]&amp;quot;&amp;nbsp;-ac&amp;nbsp;2&amp;nbsp;mix_v0.5.mp3&lt;/pre&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;音频混合，调整第1个音频的音量和第2个音频的音量&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;3.mp3&amp;nbsp;-i&amp;nbsp;new2.mp3&amp;nbsp;-filter_complex&amp;nbsp;&amp;quot;[0:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.5[a0];&amp;nbsp;
[1:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.9,adelay=5000|5000|5000,apad[a1];&amp;nbsp;[a0][a1]amerge=inputs=2[aout]&amp;quot;&amp;nbsp;
-shortest&amp;nbsp;-map&amp;nbsp;&amp;quot;[aout]&amp;quot;&amp;nbsp;-ac&amp;nbsp;2&amp;nbsp;mix_new1.mp3&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// apad&amp;nbsp; -shortest&amp;nbsp;&amp;nbsp; 是使音频长度为最长&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// adelay&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 延时播放时间&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;音视频混合，调整第1个音频的音量和第2个音频的音量&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;1.mp4&amp;nbsp;-i&amp;nbsp;2.mp3&amp;nbsp;-filter_complex&amp;nbsp;&amp;quot;[0:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.4[a0];&amp;nbsp;
[1:a]aformat=sample_fmts=fltp:channel_layouts=stereo,volume=0.9,adelay=5000|5000|5000[a1];&amp;nbsp;
[a0][a1]amix=inputs=2:duration=first[aout]&amp;quot;&amp;nbsp;-map&amp;nbsp;[aout]&amp;nbsp;-ac&amp;nbsp;2&amp;nbsp;-c:v&amp;nbsp;copy&amp;nbsp;-map&amp;nbsp;0:v:0&amp;nbsp;new3.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;视频合并&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;第一步将output1.mp4文件转成output1.ts&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;output1.mp4&amp;nbsp;-vcodec&amp;nbsp;copy&amp;nbsp;-acodec&amp;nbsp;copy&amp;nbsp;-vbsf&amp;nbsp;h264_mp4toannexb&amp;nbsp;output1.ts&lt;/pre&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;第二步将output1.ts和output2.ts合并为Cam01.mp4&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-y&amp;nbsp;-f&amp;nbsp;concat&amp;nbsp;-safe&amp;nbsp;0&amp;nbsp;-i&amp;nbsp;list.txt&amp;nbsp;-c&amp;nbsp;copy&amp;nbsp;Cam01.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.text内容如下：&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file &amp;#39;output1.ts&amp;#39;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file &amp;#39;output2.ts&amp;#39;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;1.视频编辑 比如从第5秒的地方开始，往后截取10秒钟&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-ss&amp;nbsp;5&amp;nbsp;-t&amp;nbsp;10&amp;nbsp;-i&amp;nbsp;output1.mp4&amp;nbsp;output2.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;2.视频加背景音乐&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-y&amp;nbsp;-i&amp;nbsp;Cam01.mp4&amp;nbsp;-i&amp;nbsp;jj01.mp3&amp;nbsp;-filter_complex&amp;nbsp;
[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a0];
[1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a1];
[a0][a1]amix=inputs=2:duration=first[aout]&amp;nbsp;-map&amp;nbsp;[aout]&amp;nbsp;-ac&amp;nbsp;2&amp;nbsp;-c:v&amp;nbsp;copy&amp;nbsp;-map&amp;nbsp;0:v:0&amp;nbsp;-preset&amp;nbsp;superfast&amp;nbsp;result.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;3.视频加速&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;result.mp4&amp;nbsp;-vf&amp;nbsp;setpts=PTS/2&amp;nbsp;-af&amp;nbsp;atempo=2&amp;nbsp;result01.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;4.音频剪辑&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-y&amp;nbsp;-i&amp;nbsp;124.mp3&amp;nbsp;-vn&amp;nbsp;-acodec&amp;nbsp;copy&amp;nbsp;-ss&amp;nbsp;00:00:00&amp;nbsp;-t&amp;nbsp;00:01:32&amp;nbsp;output.mp3&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;5.调整视频宽高&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;result.mp4&amp;nbsp;-vf&amp;nbsp;scale=320*240result02.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;6.分辨率&amp;nbsp; -vf scale=1920:1080&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;tsAll.mp4&amp;nbsp;-stream_loop&amp;nbsp;-1&amp;nbsp;-i&amp;nbsp;BGM.mp3&amp;nbsp;-vf&amp;nbsp;scale=1920:1080&amp;nbsp;-filter_complex&amp;nbsp;[0:a][1:a]amix&amp;nbsp;-t&amp;nbsp;540&amp;nbsp;-y&amp;nbsp;gao.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;7.比特率&amp;nbsp; -b&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;tsAll.mp4&amp;nbsp;-stream_loop&amp;nbsp;-1&amp;nbsp;-i&amp;nbsp;BGM.mp3&amp;nbsp;-vf&amp;nbsp;scale=1920:1080&amp;nbsp;-b&amp;nbsp;1.5M&amp;nbsp;-filter_complex&amp;nbsp;[0:a][1:a]amix&amp;nbsp;-t&amp;nbsp;540&amp;nbsp;-y&amp;nbsp;su.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;8.帧率 -r&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;input.avi&amp;nbsp;-r&amp;nbsp;30&amp;nbsp;output.mp4&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;9.将input.mp3的音量放大四倍&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;&amp;nbsp;-i&amp;nbsp;&amp;nbsp;&amp;nbsp;input.mp3&amp;nbsp;&amp;nbsp;&amp;nbsp;-vol&amp;nbsp;&amp;nbsp;&amp;nbsp;400&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;output.mp3&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;10.分离视频音频流&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;input_file&amp;nbsp;-vcodec&amp;nbsp;copy&amp;nbsp;-an&amp;nbsp;output_file_video　　//分离视频流
eg：ffmpeg&amp;nbsp;-i&amp;nbsp;1.mp4&amp;nbsp;-vcodec&amp;nbsp;copy&amp;nbsp;-an&amp;nbsp;2.mp4
ffmpeg&amp;nbsp;-i&amp;nbsp;input_file&amp;nbsp;-acodec&amp;nbsp;copy&amp;nbsp;-vn&amp;nbsp;output_file_audio　　//分离音频流&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;11.-r 提取图像的频率，-ss 开始时间，-t 持续时间&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-ss&amp;nbsp;0:1:30&amp;nbsp;-t&amp;nbsp;0:0:20&amp;nbsp;-i&amp;nbsp;input.avi&amp;nbsp;-vcodec&amp;nbsp;copy&amp;nbsp;-acodec&amp;nbsp;copy&amp;nbsp;output.avi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//剪切视频&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;12.ffmpeg从视频中生成gif图片：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;capx.mp4&amp;nbsp;-t&amp;nbsp;10&amp;nbsp;-s&amp;nbsp;320x240&amp;nbsp;-pix_fmt&amp;nbsp;rgb24&amp;nbsp;jidu1.gif&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;// -t参数表示提取前10秒视频&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;// -s 表示按照 320x240的像素提取&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;13.ffmpeg将视频导出成多张图片&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-i&amp;nbsp;output.mp4&amp;nbsp;-r&amp;nbsp;30&amp;nbsp;-f&amp;nbsp;image2&amp;nbsp;foo-%05d.jpeg&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;//&amp;nbsp;&amp;nbsp; -r参数表示按照30帧的速度提取。&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;14.ffmpeg视频加水印&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;ffmpeg&amp;nbsp;-hide_banner&amp;nbsp;-i&amp;nbsp;zui.mp4&amp;nbsp;-i&amp;nbsp;12.png&amp;nbsp;-filter_complex&amp;nbsp;&amp;quot;overlay=x=0:y=0&amp;quot;&amp;nbsp;out111.mp4&amp;nbsp;-y&lt;/pre&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Thu, 09 Dec 2021 15:23:57 +0800</pubDate></item><item><title>ffmpeg安装学习</title><link>http://lhj.vqilu.cn/?id=181</link><description>&lt;p&gt;下载两个压缩包，并解压&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2&quot; _src=&quot;https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2&quot;&gt;https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz&quot;&gt;http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2021/12/202112091639034492766307.png&quot; alt=&quot;压缩包.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;上传linux的指定目录下，加压&lt;/p&gt;&lt;p&gt;tar -xjvf ffmpeg-snapshot.tar.bz2&lt;/p&gt;&lt;p&gt;tar -zxvf yasm-1.3.0.tar.gz&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2021/12/202112091639034562608872.png&quot; alt=&quot;解压图片.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、进入yasm-1.3.0目录，安装&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size:19px&quot;&gt;&amp;nbsp;./configure&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size:19px&quot;&gt;make&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size:19px&quot;&gt;make install&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;3、进入ffmpeg目录，开始安装&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size:16px&quot;&gt;./configure –enable-shared –prefix= /opt/ffmpeg&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size:16px&quot;&gt;make&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size:16px&quot;&gt;make install&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4、最后一步，lib包加载&lt;/p&gt;&lt;p&gt;耐心等待完成之后执行 cd /opt/ffmpeg/ 进入安装目录，查看一下发现有&lt;strong&gt;&lt;span style=&quot;font-size:16px&quot;&gt;bin,include,lib,share&lt;/span&gt;&lt;/strong&gt;这4个目录&lt;/p&gt;&lt;p style=&quot;margin-left:14px&quot;&gt;bin是：ffmpeg主程序二进制目录&lt;/p&gt;&lt;p style=&quot;margin-left:14px&quot;&gt;include是：C/C++头文件目录&lt;/p&gt;&lt;p style=&quot;margin-left:14px&quot;&gt;lib是：编译好的库文件目录&lt;/p&gt;&lt;p style=&quot;margin-left:14px&quot;&gt;share是：文档目录&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;然后进入bin目录，执行 ./ffmpeg -version 查看当前版本的详细信息&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:red&quot;&gt;问题：&lt;/span&gt;一般会报&lt;strong&gt;libavdevice.so.57: cannot open shared object file: No such file or directory&lt;/strong&gt;，原因是lib目录未加载到链接到系统库中，&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color:red&quot;&gt;解决方案：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2021/12/202112091639034593127783.png&quot; alt=&quot;报错.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;系统ld目录列表在/etc/ld.so.conf中，打开文件会发现，里面引用了/etc/ld.so.conf.d/下面所有的.conf文件，比如mariadb-x86_64.conf我们只需要创建一个文件并写入lib路径即可，执行命令：vim /etc/ld.so.conf.d/ffmpeg.conf 然后添加一行内容： /opt/ffmpeg/lib 之后保存并退出，然后执行 Idconfig 使配置生效，&lt;/p&gt;&lt;p&gt;现在再次执行 ./ffmpeg -version 显示就正常了　&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2021/12/202112091639034604478155.png&quot; alt=&quot;版本查看.png&quot;/&gt;&lt;/p&gt;</description><pubDate>Thu, 09 Dec 2021 15:19:01 +0800</pubDate></item><item><title>对数组分组、排序等操作</title><link>http://lhj.vqilu.cn/?id=180</link><description>&lt;p&gt;从yii2框架中看见一个关于数组的操作，感觉还可以，有需要的拿走不谢&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;&amp;lt;?php
/**
&amp;nbsp;*&amp;nbsp;Class&amp;nbsp;ArrayHelper
&amp;nbsp;*&amp;nbsp;@see&amp;nbsp;https://github.com/yiichina/yii2/blob/api/framework/helpers/BaseArrayHelper.php
&amp;nbsp;*/
class&amp;nbsp;ArrayHelper
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;将对象或者对象数组转换成数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;object|array|string&amp;nbsp;$object&amp;nbsp;要转成数组的对象
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$properties&amp;nbsp;从对象类的名称到需要将生成的数组结果集放入到属性中的映射。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;每个类的属性集合指定一个以下格式的数组：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;app\models\Post&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;id&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;title&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;the&amp;nbsp;key&amp;nbsp;name&amp;nbsp;in&amp;nbsp;array&amp;nbsp;result&amp;nbsp;=&amp;gt;&amp;nbsp;property&amp;nbsp;name
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;createTime&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;created_at&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;the&amp;nbsp;key&amp;nbsp;name&amp;nbsp;in&amp;nbsp;array&amp;nbsp;result&amp;nbsp;=&amp;gt;&amp;nbsp;anonymous&amp;nbsp;function
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;length&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;function&amp;nbsp;($post)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;strlen($post-&amp;gt;content);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;`ArrayHelper::toArray($post,&amp;nbsp;$properties)`&amp;nbsp;调用此方法生成的数组集合可能如下：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;123,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;title&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;test&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;createTime&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;2013-01-01&amp;nbsp;12:00AM&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;length&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;301,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;bool&amp;nbsp;$recursive&amp;nbsp;是否使用递归的方式将对象的属性转换为数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&amp;nbsp;这种对象的数组表示
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;toArray($object,&amp;nbsp;$properties&amp;nbsp;=&amp;nbsp;[],&amp;nbsp;$recursive&amp;nbsp;=&amp;nbsp;true)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_array($object))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($recursive)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($object&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$value)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_array($value)&amp;nbsp;||&amp;nbsp;is_object($value))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$object[$key]&amp;nbsp;=&amp;nbsp;static::toArray($value,&amp;nbsp;$properties,&amp;nbsp;true);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$object;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;(is_object($object))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!empty($properties))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$className&amp;nbsp;=&amp;nbsp;get_class($object);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!empty($properties[$className]))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($properties[$className]&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$name)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_int($key))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$name]&amp;nbsp;=&amp;nbsp;$object-&amp;gt;$name;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$key]&amp;nbsp;=&amp;nbsp;static::getValue($object,&amp;nbsp;$name);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$recursive&amp;nbsp;?&amp;nbsp;static::toArray($result,&amp;nbsp;$properties)&amp;nbsp;:&amp;nbsp;$result;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($object&amp;nbsp;instanceof&amp;nbsp;Arrayable)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;$object-&amp;gt;toArray([],&amp;nbsp;[],&amp;nbsp;$recursive);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($object&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$value)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$key]&amp;nbsp;=&amp;nbsp;$value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$recursive&amp;nbsp;?&amp;nbsp;static::toArray($result,&amp;nbsp;$properties)&amp;nbsp;:&amp;nbsp;$result;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;[$object];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;递归合并&amp;nbsp;2&amp;nbsp;个及以上的数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果每个数组元素有相同的字符串键值对，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;后者将会覆盖前者（不同于&amp;nbsp;array_merge_recursive）。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果两个数组都有数组类型的元素并且具有相同的键，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;那么将进行递归合并。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;对于整型键类型元素，后面数组中的元素将
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;会被追加到前面的数组中去。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;你能够使用&amp;nbsp;[[UnsetArrayValue]]&amp;nbsp;对象从之前的数组中设置值或者
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;[[ReplaceArrayValue]]&amp;nbsp;强制替换原先的值来替代递归数组合并。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$a&amp;nbsp;需要合并的数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$b&amp;nbsp;需要合并的数组。你能够指定额外的
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;数组中的第三个参数，第四个参数等。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&amp;nbsp;合并之后的数组（不改变原始数组。）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;merge($a,&amp;nbsp;$b)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$args&amp;nbsp;=&amp;nbsp;func_get_args();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$res&amp;nbsp;=&amp;nbsp;array_shift($args);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;(!empty($args))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;(array_shift($args)&amp;nbsp;as&amp;nbsp;$k&amp;nbsp;=&amp;gt;&amp;nbsp;$v)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($v&amp;nbsp;instanceof&amp;nbsp;UnsetArrayValue)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unset($res[$k]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;($v&amp;nbsp;instanceof&amp;nbsp;ReplaceArrayValue)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$res[$k]&amp;nbsp;=&amp;nbsp;$v-&amp;gt;value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;(is_int($k))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(array_key_exists($k,&amp;nbsp;$res))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$res[]&amp;nbsp;=&amp;nbsp;$v;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$res[$k]&amp;nbsp;=&amp;nbsp;$v;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;(is_array($v)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;isset($res[$k])&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;is_array($res[$k]))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$res[$k]&amp;nbsp;=&amp;nbsp;static::merge($res[$k],&amp;nbsp;$v);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$res[$k]&amp;nbsp;=&amp;nbsp;$v;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$res;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;检索具有给定键或属性名的数组元素或对象属性的值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果这个数组中不存在键，将返回默认值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;从对象中获取值时不使用。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;数组中的键可以指定圆点来检索子数组中的值或者对象中包含的属性。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;特别是，如果键是&amp;nbsp;`x.y.z`，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;然后返回的值中像这样&amp;nbsp;`$array[&amp;#39;x&amp;#39;][&amp;#39;y&amp;#39;][&amp;#39;z&amp;#39;]`&amp;nbsp;或者&amp;nbsp;`$array-&amp;gt;x-&amp;gt;y-&amp;gt;z`（如果&amp;nbsp;`$array`&amp;nbsp;是一个对象）。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果&amp;nbsp;`$array[&amp;#39;x&amp;#39;]`&amp;nbsp;或者&amp;nbsp;`$array-&amp;gt;x`&amp;nbsp;既不是数组也不是对象，将返回默认值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;注意如果数组已经有元素&amp;nbsp;`x.y.z`，然后它的值将被返回来替代遍历子数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;因此最好要做指定键值对的数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;像这样&amp;nbsp;`[&amp;#39;x&amp;#39;,&amp;nbsp;&amp;#39;y&amp;#39;,&amp;nbsp;&amp;#39;z&amp;#39;]`。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;以下是一些用法示例,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;working&amp;nbsp;with&amp;nbsp;array
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$username&amp;nbsp;=&amp;nbsp;\yii\helpers\ArrayHelper::getValue($_POST,&amp;nbsp;&amp;#39;username&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;working&amp;nbsp;with&amp;nbsp;object
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$username&amp;nbsp;=&amp;nbsp;\yii\helpers\ArrayHelper::getValue($user,&amp;nbsp;&amp;#39;username&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;working&amp;nbsp;with&amp;nbsp;anonymous&amp;nbsp;function
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$fullName&amp;nbsp;=&amp;nbsp;\yii\helpers\ArrayHelper::getValue($user,&amp;nbsp;function&amp;nbsp;($user,&amp;nbsp;$defaultValue)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$user-&amp;gt;firstName&amp;nbsp;.&amp;nbsp;&amp;#39;&amp;nbsp;&amp;#39;&amp;nbsp;.&amp;nbsp;$user-&amp;gt;lastName;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;using&amp;nbsp;dot&amp;nbsp;format&amp;nbsp;to&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;property&amp;nbsp;of&amp;nbsp;embedded&amp;nbsp;object
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$street&amp;nbsp;=&amp;nbsp;\yii\helpers\ArrayHelper::getValue($users,&amp;nbsp;&amp;#39;address.street&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;using&amp;nbsp;an&amp;nbsp;array&amp;nbsp;of&amp;nbsp;keys&amp;nbsp;to&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;value
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$value&amp;nbsp;=&amp;nbsp;\yii\helpers\ArrayHelper::getValue($versions,&amp;nbsp;[&amp;#39;1.0&amp;#39;,&amp;nbsp;&amp;#39;date&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array|object&amp;nbsp;$array&amp;nbsp;从对象或数组中进行提取
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string|\Closure|array&amp;nbsp;$key&amp;nbsp;数组元素的键名，数组当中的键或者对象当中的属性名称，或者一个返回值的匿名函数。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;匿名函数应该像这样签名：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;`function($array,&amp;nbsp;$defaultValue)`。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;在&amp;nbsp;2.0.4&amp;nbsp;版本中可以通过数组当中可用的键来传递。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;mixed&amp;nbsp;$default&amp;nbsp;如果指定的数组当中的键不存在则返回默认值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;从对象当中获取值时不使用。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;mixed&amp;nbsp;找到该元素当中的值并返回，否则直接返回默认的值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;getValue($array,&amp;nbsp;$key,&amp;nbsp;$default&amp;nbsp;=&amp;nbsp;null)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($key&amp;nbsp;instanceof&amp;nbsp;\Closure)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$key($array,&amp;nbsp;$default);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_array($key))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastKey&amp;nbsp;=&amp;nbsp;array_pop($key);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($key&amp;nbsp;as&amp;nbsp;$keyPart)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;static::getValue($array,&amp;nbsp;$keyPart);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$key&amp;nbsp;=&amp;nbsp;$lastKey;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_array($array)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;(isset($array[$key])&amp;nbsp;||&amp;nbsp;array_key_exists($key,&amp;nbsp;$array)))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$array[$key];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(($pos&amp;nbsp;=&amp;nbsp;strrpos($key,&amp;nbsp;&amp;#39;.&amp;#39;))&amp;nbsp;!==&amp;nbsp;false)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;static::getValue($array,&amp;nbsp;substr($key,&amp;nbsp;0,&amp;nbsp;$pos),&amp;nbsp;$default);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$key&amp;nbsp;=&amp;nbsp;substr($key,&amp;nbsp;$pos&amp;nbsp;+&amp;nbsp;1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_object($array))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;this&amp;nbsp;is&amp;nbsp;expected&amp;nbsp;to&amp;nbsp;fail&amp;nbsp;if&amp;nbsp;the&amp;nbsp;property&amp;nbsp;does&amp;nbsp;not&amp;nbsp;exist,&amp;nbsp;or&amp;nbsp;__get()&amp;nbsp;is&amp;nbsp;not&amp;nbsp;implemented
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;it&amp;nbsp;is&amp;nbsp;not&amp;nbsp;reliably&amp;nbsp;possible&amp;nbsp;to&amp;nbsp;check&amp;nbsp;whether&amp;nbsp;a&amp;nbsp;property&amp;nbsp;is&amp;nbsp;accessible&amp;nbsp;beforehand
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$array-&amp;gt;$key;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;(is_array($array))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;(isset($array[$key])&amp;nbsp;||&amp;nbsp;array_key_exists($key,&amp;nbsp;$array))&amp;nbsp;?&amp;nbsp;$array[$key]&amp;nbsp;:&amp;nbsp;$default;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$default;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;在指定键的路径上将值写入关联数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果没有这样的关键路径，它将通过递归创建。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果键存在，就会被覆盖。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;key&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;in&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;val1&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;key&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;val&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;`ArrayHelper::setValue($array,&amp;nbsp;&amp;#39;key.in.0&amp;#39;,&amp;nbsp;[&amp;#39;arr&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;val&amp;#39;]);`&amp;nbsp;的结果如下：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;key&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;in&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;arr&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;val&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;key&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;val&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;这个
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;`ArrayHelper::setValue($array,&amp;nbsp;&amp;#39;key.in&amp;#39;,&amp;nbsp;[&amp;#39;arr&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;val&amp;#39;]);`&amp;nbsp;或者
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;`ArrayHelper::setValue($array,&amp;nbsp;[&amp;#39;key&amp;#39;,&amp;nbsp;&amp;#39;in&amp;#39;],&amp;nbsp;[&amp;#39;arr&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;val&amp;#39;]);`
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;生成的结果集如下：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;key&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;in&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;arr&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;val&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array&amp;nbsp;将值写入到数组中
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string|array|null&amp;nbsp;$path&amp;nbsp;你想将值写入到&amp;nbsp;`$array`&amp;nbsp;中的路径
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;它的组成可以是将每个路径的描述用圆点连起来
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;也可以用数组中的键来描述路径
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果路径为空&amp;nbsp;`$array`&amp;nbsp;则被分配给&amp;nbsp;`$value`
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;mixed&amp;nbsp;$value&amp;nbsp;被写入的值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@since&amp;nbsp;2.0.13
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;setValue(&amp;amp;$array,&amp;nbsp;$path,&amp;nbsp;$value)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($path&amp;nbsp;===&amp;nbsp;null)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;$value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$keys&amp;nbsp;=&amp;nbsp;is_array($path)&amp;nbsp;?&amp;nbsp;$path&amp;nbsp;:&amp;nbsp;explode(&amp;#39;.&amp;#39;,&amp;nbsp;$path);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;(count($keys)&amp;nbsp;&amp;gt;&amp;nbsp;1)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$key&amp;nbsp;=&amp;nbsp;array_shift($keys);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!isset($array[$key]))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$array[$key]&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!is_array($array[$key]))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$array[$key]&amp;nbsp;=&amp;nbsp;[$array[$key]];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;&amp;amp;$array[$key];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$array[array_shift($keys)]&amp;nbsp;=&amp;nbsp;$value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;从数组中移除元素并返回值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果数组中不存在键，则默认值将被返回。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;用法示例，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;[&amp;#39;type&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;A&amp;#39;,&amp;nbsp;&amp;#39;options&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[1,&amp;nbsp;2]];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;working&amp;nbsp;with&amp;nbsp;array
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$type&amp;nbsp;=&amp;nbsp;\yii\helpers\ArrayHelper::remove($array,&amp;nbsp;&amp;#39;type&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;$array&amp;nbsp;content
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;[&amp;#39;options&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[1,&amp;nbsp;2]];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array&amp;nbsp;要从中提取值得数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string&amp;nbsp;$key&amp;nbsp;数组元素的键名
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;mixed&amp;nbsp;$default&amp;nbsp;如果指定的键不存在则返回默认值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;mixed|null&amp;nbsp;如果找到该元素的值，否则为默认值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;remove(&amp;amp;$array,&amp;nbsp;$key,&amp;nbsp;$default&amp;nbsp;=&amp;nbsp;null)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_array($array)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;(isset($array[$key])&amp;nbsp;||&amp;nbsp;array_key_exists($key,&amp;nbsp;$array)))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$value&amp;nbsp;=&amp;nbsp;$array[$key];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unset($array[$key]);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$default;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;从数组中移除对应的值并返回移除的项。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;比如，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;[&amp;#39;Bob&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;Dylan&amp;#39;,&amp;nbsp;&amp;#39;Michael&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;Jackson&amp;#39;,&amp;nbsp;&amp;#39;Mick&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;Jagger&amp;#39;,&amp;nbsp;&amp;#39;Janet&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;Jackson&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$removed&amp;nbsp;=&amp;nbsp;\yii\helpers\ArrayHelper::removeValue($array,&amp;nbsp;&amp;#39;Jackson&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;result:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;[&amp;#39;Bob&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;Dylan&amp;#39;,&amp;nbsp;&amp;#39;Mick&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;Jagger&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;$removed&amp;nbsp;=&amp;nbsp;[&amp;#39;Michael&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;Jackson&amp;#39;,&amp;nbsp;&amp;#39;Janet&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;Jackson&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array&amp;nbsp;查找值得数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string&amp;nbsp;$value&amp;nbsp;从这个数组中移除的值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&amp;nbsp;返回从数组中移除的项
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@since&amp;nbsp;2.0.11
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;removeValue(&amp;amp;$array,&amp;nbsp;$value)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_array($array))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($array&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$val)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($val&amp;nbsp;===&amp;nbsp;$value)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$key]&amp;nbsp;=&amp;nbsp;$val;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unset($array[$key]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$result;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;根据指定的键对数组进行索引和/或分组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;输入的应该是多维数组或对象数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;这个&amp;nbsp;$key&amp;nbsp;可以是子数组的键名，对象的属性名，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;或匿名函数返回的值将被用作键。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$groups&amp;nbsp;是数组中的键，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;用于根据指定的键将输入数组分组为一个或多个子数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果&amp;nbsp;`$key`&amp;nbsp;被指定为&amp;nbsp;`null`&amp;nbsp;或者与该键对应的元素的值除未指定的&amp;nbsp;`$groups`
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;外为&amp;nbsp;`null`&amp;nbsp;那么该元素将被丢弃。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;比如：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;123&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;abc&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;laptop&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;345&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;def&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;tablet&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;345&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;hgi&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;smartphone&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;ArrayHelper::index($array,&amp;nbsp;&amp;#39;id&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;结果会生成一个关联数组，这个键就是&amp;nbsp;`id`&amp;nbsp;属性的值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;123&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;123&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;abc&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;laptop&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;345&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;345&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;hgi&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;smartphone&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;The&amp;nbsp;second&amp;nbsp;element&amp;nbsp;of&amp;nbsp;an&amp;nbsp;original&amp;nbsp;array&amp;nbsp;is&amp;nbsp;overwritten&amp;nbsp;by&amp;nbsp;the&amp;nbsp;last&amp;nbsp;element&amp;nbsp;because&amp;nbsp;of&amp;nbsp;the&amp;nbsp;same&amp;nbsp;id
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;匿名函数也可以用作于分组数组当中。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;ArrayHelper::index($array,&amp;nbsp;function&amp;nbsp;($element)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$element[&amp;#39;id&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;`id`&amp;nbsp;将作为第三个参数传入到&amp;nbsp;`$array`&amp;nbsp;并按&amp;nbsp;`id`&amp;nbsp;进行分组：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;ArrayHelper::index($array,&amp;nbsp;null,&amp;nbsp;&amp;#39;id&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;结果将生成多维数组并按&amp;nbsp;`id`&amp;nbsp;进行一维分组，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;二维按索引&amp;nbsp;`device`&amp;nbsp;进行分组并生成&amp;nbsp;`data`&amp;nbsp;索引三维数组：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;123&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;123&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;abc&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;laptop&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;345&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[&amp;nbsp;//&amp;nbsp;all&amp;nbsp;elements&amp;nbsp;with&amp;nbsp;this&amp;nbsp;index&amp;nbsp;are&amp;nbsp;present&amp;nbsp;in&amp;nbsp;the&amp;nbsp;result&amp;nbsp;array
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;345&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;def&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;tablet&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;345&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;hgi&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;smartphone&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;通过键进行分组的数组中也可以使用匿名函数：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;ArrayHelper::index($array,&amp;nbsp;&amp;#39;data&amp;#39;,&amp;nbsp;[function&amp;nbsp;($element)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$element[&amp;#39;id&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;},&amp;nbsp;&amp;#39;device&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;结果将返回一个多维数组一维按&amp;nbsp;`id`&amp;nbsp;分组，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;二维按索引&amp;nbsp;`device`&amp;nbsp;分组并且三维按索引&amp;nbsp;`data`&amp;nbsp;进行分组：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;123&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;laptop&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;abc&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;123&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;abc&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;laptop&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;345&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;tablet&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;def&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;345&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;def&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;tablet&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;smartphone&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;hgi&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;345&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;hgi&amp;#39;,&amp;nbsp;&amp;#39;device&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;smartphone&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array&amp;nbsp;需要索引或者分组的数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string|\Closure|null&amp;nbsp;$key&amp;nbsp;列名或者匿名函数的结果将用于对数组进行分组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string|string[]|\Closure[]|null&amp;nbsp;$groups&amp;nbsp;数组当中的键，将用一个或多个键来对传入的数组进行分组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果&amp;nbsp;$key&amp;nbsp;属性或者它的值的特定元素为空和&amp;nbsp;$groups&amp;nbsp;没有定义，数组的元素将被丢弃。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;因此，如果变量&amp;nbsp;$groups&amp;nbsp;是指定的，数组元素将被添加到没有任何键的数组当中。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;此参数自版本&amp;nbsp;2.0.8&amp;nbsp;起可用。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$delKeys&amp;nbsp;要删除的键&amp;nbsp;custom&amp;nbsp;code
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&amp;nbsp;索引数组和/或分组数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;index($array,&amp;nbsp;$key,&amp;nbsp;$groups&amp;nbsp;=&amp;nbsp;[],&amp;nbsp;$delKeys&amp;nbsp;=&amp;nbsp;[])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$groups&amp;nbsp;=&amp;nbsp;(array)&amp;nbsp;$groups;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($array&amp;nbsp;as&amp;nbsp;$element)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArray&amp;nbsp;=&amp;nbsp;&amp;amp;$result;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($groups&amp;nbsp;as&amp;nbsp;$group)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$value&amp;nbsp;=&amp;nbsp;static::getValue($element,&amp;nbsp;$group);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!array_key_exists($value,&amp;nbsp;$lastArray))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArray[$value]&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArray&amp;nbsp;=&amp;nbsp;&amp;amp;$lastArray[$value];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($key&amp;nbsp;===&amp;nbsp;null)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!empty($groups))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//custom&amp;nbsp;code
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($delKeys&amp;nbsp;as&amp;nbsp;$delKey)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;static::remove($element,&amp;nbsp;$delKey);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArray[]&amp;nbsp;=&amp;nbsp;$element;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$value&amp;nbsp;=&amp;nbsp;static::getValue($element,&amp;nbsp;$key);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($value&amp;nbsp;!==&amp;nbsp;null)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_float($value))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$value&amp;nbsp;=&amp;nbsp;StringHelper::floatToString($value);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//custom&amp;nbsp;code
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($delKeys&amp;nbsp;as&amp;nbsp;$delKey)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;static::remove($element,&amp;nbsp;$delKey);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArray[$value]&amp;nbsp;=&amp;nbsp;$element;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unset($lastArray);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$result;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;返回数组中指定列的值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;传入的数组类型可以是多维数组或者对象数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;比如，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;123&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;abc&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;345&amp;#39;,&amp;nbsp;&amp;#39;data&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;def&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;ArrayHelper::getColumn($array,&amp;nbsp;&amp;#39;id&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;the&amp;nbsp;result&amp;nbsp;is:&amp;nbsp;[&amp;#39;123&amp;#39;,&amp;nbsp;&amp;#39;345&amp;#39;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;using&amp;nbsp;anonymous&amp;nbsp;function
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;ArrayHelper::getColumn($array,&amp;nbsp;function&amp;nbsp;($element)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$element[&amp;#39;id&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;int|string|\Closure&amp;nbsp;$name
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;bool&amp;nbsp;$keepKeys&amp;nbsp;是否保留数组的键。如果不保留，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;数组的结果的索引将被重新定义为整数。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&amp;nbsp;返回列表的列值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;getColumn($array,&amp;nbsp;$name,&amp;nbsp;$keepKeys&amp;nbsp;=&amp;nbsp;true)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($keepKeys)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($array&amp;nbsp;as&amp;nbsp;$k&amp;nbsp;=&amp;gt;&amp;nbsp;$element)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$k]&amp;nbsp;=&amp;nbsp;static::getValue($element,&amp;nbsp;$name);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($array&amp;nbsp;as&amp;nbsp;$element)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[]&amp;nbsp;=&amp;nbsp;static::getValue($element,&amp;nbsp;$name);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$result;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;从多维数组当中或者对象数组（key-value&amp;nbsp;pairs）构建一个映射。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;那个&amp;nbsp;`$from`&amp;nbsp;和&amp;nbsp;`$to`&amp;nbsp;参数指定的键名或者属性名来设置映射。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;可选，可以根据&amp;nbsp;`$group`&amp;nbsp;变量对映射键值对进一步分组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;比如，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;123&amp;#39;,&amp;nbsp;&amp;#39;name&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;aaa&amp;#39;,&amp;nbsp;&amp;#39;class&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;x&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;124&amp;#39;,&amp;nbsp;&amp;#39;name&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;bbb&amp;#39;,&amp;nbsp;&amp;#39;class&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;x&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&amp;#39;id&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;345&amp;#39;,&amp;nbsp;&amp;#39;name&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;ccc&amp;#39;,&amp;nbsp;&amp;#39;class&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;y&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;ArrayHelper::map($array,&amp;nbsp;&amp;#39;id&amp;#39;,&amp;nbsp;&amp;#39;name&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;the&amp;nbsp;result&amp;nbsp;is:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;123&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;aaa&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;124&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;bbb&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;345&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;ccc&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;ArrayHelper::map($array,&amp;nbsp;&amp;#39;id&amp;#39;,&amp;nbsp;&amp;#39;name&amp;#39;,&amp;nbsp;&amp;#39;class&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;the&amp;nbsp;result&amp;nbsp;is:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;x&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;123&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;aaa&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;124&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;bbb&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;y&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;345&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;ccc&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string|\Closure&amp;nbsp;$from
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string|\Closure&amp;nbsp;$to
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string|\Closure&amp;nbsp;$group
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;map($array,&amp;nbsp;$from,&amp;nbsp;$to,&amp;nbsp;$group&amp;nbsp;=&amp;nbsp;null)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($array&amp;nbsp;as&amp;nbsp;$element)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$key&amp;nbsp;=&amp;nbsp;static::getValue($element,&amp;nbsp;$from);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$value&amp;nbsp;=&amp;nbsp;static::getValue($element,&amp;nbsp;$to);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($group&amp;nbsp;!==&amp;nbsp;null)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[static::getValue($element,&amp;nbsp;$group)][$key]&amp;nbsp;=&amp;nbsp;$value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$key]&amp;nbsp;=&amp;nbsp;$value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$result;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;检查给定数组是否包含指定键。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;此方法通过支持不区分大小写键的比较增强了&amp;nbsp;`array_key_exists()`
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;函数。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string&amp;nbsp;$key&amp;nbsp;检测的键名
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array&amp;nbsp;需要检查键的数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;bool&amp;nbsp;$caseSensitive&amp;nbsp;键的比较是否支持区分大小写
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&amp;nbsp;数组是否包含指定的键
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;keyExists($key,&amp;nbsp;$array,&amp;nbsp;$caseSensitive&amp;nbsp;=&amp;nbsp;true)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($caseSensitive)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Function&amp;nbsp;`isset`&amp;nbsp;checks&amp;nbsp;key&amp;nbsp;faster&amp;nbsp;but&amp;nbsp;skips&amp;nbsp;`null`,&amp;nbsp;`array_key_exists`&amp;nbsp;handles&amp;nbsp;this&amp;nbsp;case
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;http://php.net/manual/en/function.array-key-exists.php#107786
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;isset($array[$key])&amp;nbsp;||&amp;nbsp;array_key_exists($key,&amp;nbsp;$array);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;(array_keys($array)&amp;nbsp;as&amp;nbsp;$k)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(strcasecmp($key,&amp;nbsp;$k)&amp;nbsp;===&amp;nbsp;0)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;按一个或多个键对对象数组或者数组（具有相同结构）进行排序。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array&amp;nbsp;要排序的数组。调用此方法后数组将被修改。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string|\Closure|array&amp;nbsp;$key&amp;nbsp;按&amp;nbsp;key(s)&amp;nbsp;进行排序。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;引用子数组的键名元素，对象的属性名，或一个匿名函数返回用于比较的值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;匿名函数的签名应该是这样的：`function($item)`。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;要按多维键排序，需提供数组中的键。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;int|array&amp;nbsp;$direction&amp;nbsp;排序方向。它可以按照&amp;nbsp;`SORT_ASC`&amp;nbsp;或者&amp;nbsp;`SORT_DESC`&amp;nbsp;来排序。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;当按照不同排序方向的多个键排序时，使用数组进行排序。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;int|array&amp;nbsp;$sortFlag&amp;nbsp;PHP&amp;nbsp;排序标记。包括有效的值
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;`SORT_REGULAR`，`SORT_NUMERIC`，`SORT_STRING`，`SORT_LOCALE_STRING`，`SORT_NATURAL`&amp;nbsp;和&amp;nbsp;`SORT_FLAG_CASE`。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;请参考&amp;nbsp;[PHP&amp;nbsp;manual](http://php.net/manual/en/function.sort.php)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;获取更多详细信息。按具有不同排序标志的多个键排序时，使用数组中的标记排序。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@throws&amp;nbsp;InvalidArgumentException&amp;nbsp;如果&amp;nbsp;$direction&amp;nbsp;或者&amp;nbsp;$sortFlag&amp;nbsp;参数的个数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;与&amp;nbsp;$key&amp;nbsp;参数的个数不一致。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;multisort(&amp;amp;$array,&amp;nbsp;$key,&amp;nbsp;$direction&amp;nbsp;=&amp;nbsp;SORT_ASC,&amp;nbsp;$sortFlag&amp;nbsp;=&amp;nbsp;SORT_REGULAR)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$keys&amp;nbsp;=&amp;nbsp;is_array($key)&amp;nbsp;?&amp;nbsp;$key&amp;nbsp;:&amp;nbsp;[$key];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(empty($keys)&amp;nbsp;||&amp;nbsp;empty($array))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$n&amp;nbsp;=&amp;nbsp;count($keys);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_scalar($direction))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$direction&amp;nbsp;=&amp;nbsp;array_fill(0,&amp;nbsp;$n,&amp;nbsp;$direction);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;(count($direction)&amp;nbsp;!==&amp;nbsp;$n)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;new&amp;nbsp;InvalidArgumentException(&amp;#39;The&amp;nbsp;length&amp;nbsp;of&amp;nbsp;$direction&amp;nbsp;parameter&amp;nbsp;must&amp;nbsp;be&amp;nbsp;the&amp;nbsp;same&amp;nbsp;as&amp;nbsp;that&amp;nbsp;of&amp;nbsp;$keys.&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_scalar($sortFlag))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$sortFlag&amp;nbsp;=&amp;nbsp;array_fill(0,&amp;nbsp;$n,&amp;nbsp;$sortFlag);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;(count($sortFlag)&amp;nbsp;!==&amp;nbsp;$n)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;new&amp;nbsp;InvalidArgumentException(&amp;#39;The&amp;nbsp;length&amp;nbsp;of&amp;nbsp;$sortFlag&amp;nbsp;parameter&amp;nbsp;must&amp;nbsp;be&amp;nbsp;the&amp;nbsp;same&amp;nbsp;as&amp;nbsp;that&amp;nbsp;of&amp;nbsp;$keys.&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$args&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($keys&amp;nbsp;as&amp;nbsp;$i&amp;nbsp;=&amp;gt;&amp;nbsp;$key)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$flag&amp;nbsp;=&amp;nbsp;$sortFlag[$i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$args[]&amp;nbsp;=&amp;nbsp;static::getColumn($array,&amp;nbsp;$key);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$args[]&amp;nbsp;=&amp;nbsp;$direction[$i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$args[]&amp;nbsp;=&amp;nbsp;$flag;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;This&amp;nbsp;fix&amp;nbsp;is&amp;nbsp;used&amp;nbsp;for&amp;nbsp;cases&amp;nbsp;when&amp;nbsp;main&amp;nbsp;sorting&amp;nbsp;specified&amp;nbsp;by&amp;nbsp;columns&amp;nbsp;has&amp;nbsp;equal&amp;nbsp;values
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Without&amp;nbsp;it&amp;nbsp;it&amp;nbsp;will&amp;nbsp;lead&amp;nbsp;to&amp;nbsp;Fatal&amp;nbsp;Error:&amp;nbsp;Nesting&amp;nbsp;level&amp;nbsp;too&amp;nbsp;deep&amp;nbsp;-&amp;nbsp;recursive&amp;nbsp;dependency?
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$args[]&amp;nbsp;=&amp;nbsp;range(1,&amp;nbsp;count($array));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$args[]&amp;nbsp;=&amp;nbsp;SORT_ASC;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$args[]&amp;nbsp;=&amp;nbsp;SORT_NUMERIC;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$args[]&amp;nbsp;=&amp;nbsp;&amp;amp;$array;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;call_user_func_array(&amp;#39;array_multisort&amp;#39;,&amp;nbsp;$args);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;将字符串数组中的特殊字符编码为&amp;nbsp;HTML&amp;nbsp;实体。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;默认情况下只对数组值进行编码。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果数组是一个值，此方法还将递归的进行编码。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;只有字符串值才会被编码。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$data&amp;nbsp;将要被编码的数据
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;bool&amp;nbsp;$valuesOnly&amp;nbsp;是否只对数组值进行编码。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果不是，数组的键和值将同时被编码。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;string&amp;nbsp;$charset&amp;nbsp;数据使用的字符集。如果没有设置，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;[[\yii\base\Application::charset]]&amp;nbsp;将被使用。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&amp;nbsp;返回编码的数据
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@see&amp;nbsp;http://www.php.net/manual/en/function.htmlspecialchars.php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;htmlEncode($data,&amp;nbsp;$valuesOnly&amp;nbsp;=&amp;nbsp;true,&amp;nbsp;$charset&amp;nbsp;=&amp;nbsp;null)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($charset&amp;nbsp;===&amp;nbsp;null)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$charset&amp;nbsp;=&amp;nbsp;&amp;#39;UTF-8&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$d&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($data&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$value)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!$valuesOnly&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;is_string($key))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$key&amp;nbsp;=&amp;nbsp;htmlspecialchars($key,&amp;nbsp;ENT_QUOTES&amp;nbsp;|&amp;nbsp;ENT_SUBSTITUTE,&amp;nbsp;$charset);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_string($value))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$d[$key]&amp;nbsp;=&amp;nbsp;htmlspecialchars($value,&amp;nbsp;ENT_QUOTES&amp;nbsp;|&amp;nbsp;ENT_SUBSTITUTE,&amp;nbsp;$charset);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;(is_array($value))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$d[$key]&amp;nbsp;=&amp;nbsp;static::htmlEncode($value,&amp;nbsp;$valuesOnly,&amp;nbsp;$charset);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$d[$key]&amp;nbsp;=&amp;nbsp;$value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$d;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;将&amp;nbsp;HTML&amp;nbsp;实体解码为字符串数组中的相应字符。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;只有数组值将被默认解码。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果数组是一个值，此方法还将递归的进行解码。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;只有字符串值才会被解码。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$data&amp;nbsp;将要被解码的数据
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;bool&amp;nbsp;$valuesOnly&amp;nbsp;是否只对数组值进行解码。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果不是，数组的键和值都将被解码。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&amp;nbsp;返回解码的数据
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@see&amp;nbsp;http://www.php.net/manual/en/function.htmlspecialchars-decode.php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;htmlDecode($data,&amp;nbsp;$valuesOnly&amp;nbsp;=&amp;nbsp;true)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$d&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($data&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$value)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!$valuesOnly&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;is_string($key))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$key&amp;nbsp;=&amp;nbsp;htmlspecialchars_decode($key,&amp;nbsp;ENT_QUOTES);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_string($value))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$d[$key]&amp;nbsp;=&amp;nbsp;htmlspecialchars_decode($value,&amp;nbsp;ENT_QUOTES);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;(is_array($value))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$d[$key]&amp;nbsp;=&amp;nbsp;static::htmlDecode($value);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$d[$key]&amp;nbsp;=&amp;nbsp;$value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$d;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;返回一个值，该值指示给定数组是否是关联数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果数组的键都是字符串，那么数组就是关联的。如果&amp;nbsp;`$allStrings`&amp;nbsp;设置为假，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果数组的键中至少有一个是字符串，那么该数组将被视为关联数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;注意，空数组不会被认为是关联的。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array&amp;nbsp;将被检测的数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;bool&amp;nbsp;$allStrings&amp;nbsp;数组键是否必须为所有字符串
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;以便数组被视为关联的。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&amp;nbsp;返回数组是否是关联数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;isAssociative($array,&amp;nbsp;$allStrings&amp;nbsp;=&amp;nbsp;true)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!is_array($array)&amp;nbsp;||&amp;nbsp;empty($array))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($allStrings)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($array&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$value)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!is_string($key))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($array&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$value)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_string($key))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;返回一个值，该值指示给定数组是否是索引数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果一个数组的所有键都是整数，那么该数组是索引数组。如果变量&amp;nbsp;`$consecutive`&amp;nbsp;设置为真，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;那么数组键必须是从&amp;nbsp;0&amp;nbsp;开始的连续序列。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;注意，空数组将被认为是索引的。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array&amp;nbsp;将被检测的数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;bool&amp;nbsp;$consecutive&amp;nbsp;数组键是否必须是连续序列
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;以便数组是不是索引数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&amp;nbsp;是否为索引数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;isIndexed($array,&amp;nbsp;$consecutive&amp;nbsp;=&amp;nbsp;false)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!is_array($array))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(empty($array))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($consecutive)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;array_keys($array)&amp;nbsp;===&amp;nbsp;range(0,&amp;nbsp;count($array)&amp;nbsp;-&amp;nbsp;1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($array&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$value)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!is_int($key))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;检查是否为数组或&amp;nbsp;[[\Traversable]]&amp;nbsp;包含一个元素。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;这个方法与&amp;nbsp;PHP&amp;nbsp;函数&amp;nbsp;[in_array()](http://php.net/manual/en/function.in-array.php)&amp;nbsp;相同
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;但它还适用于实现&amp;nbsp;[[\Traversable]]&amp;nbsp;接口。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;mixed&amp;nbsp;$needle&amp;nbsp;寻找的值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array|\Traversable&amp;nbsp;$haystack&amp;nbsp;要寻找的值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;bool&amp;nbsp;$strict&amp;nbsp;是否启用&amp;nbsp;(`===`)&amp;nbsp;比较。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&amp;nbsp;如果&amp;nbsp;`$needle`&amp;nbsp;存在于&amp;nbsp;`$haystack`&amp;nbsp;中返回&amp;nbsp;`true`，否则将返回&amp;nbsp;`false`。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@throws&amp;nbsp;InvalidArgumentException&amp;nbsp;如果&amp;nbsp;`$haystack`&amp;nbsp;不能遍历也不是数组则返回异常。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@see&amp;nbsp;http://php.net/manual/en/function.in-array.php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@since&amp;nbsp;2.0.7
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;isIn($needle,&amp;nbsp;$haystack,&amp;nbsp;$strict&amp;nbsp;=&amp;nbsp;false)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($haystack&amp;nbsp;instanceof&amp;nbsp;\Traversable)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($haystack&amp;nbsp;as&amp;nbsp;$value)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($needle&amp;nbsp;==&amp;nbsp;$value&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;(!$strict&amp;nbsp;||&amp;nbsp;$needle&amp;nbsp;===&amp;nbsp;$value))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;elseif&amp;nbsp;(is_array($haystack))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;in_array($needle,&amp;nbsp;$haystack,&amp;nbsp;$strict);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;new&amp;nbsp;InvalidArgumentException(&amp;#39;Argument&amp;nbsp;$haystack&amp;nbsp;must&amp;nbsp;be&amp;nbsp;an&amp;nbsp;array&amp;nbsp;or&amp;nbsp;implement&amp;nbsp;Traversable&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;检查变量是数组还是&amp;nbsp;[[\Traversable]]。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;该方法与&amp;nbsp;PHP&amp;nbsp;函数&amp;nbsp;[is_array()](http://php.net/manual/en/function.is-array.php)&amp;nbsp;相同，
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;但是，它还可以用于实现&amp;nbsp;[[\Traversable]]&amp;nbsp;接口。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;mixed&amp;nbsp;$var&amp;nbsp;被评估的变量。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&amp;nbsp;变量&amp;nbsp;$var&amp;nbsp;是否是一个数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@see&amp;nbsp;http://php.net/manual/en/function.is-array.php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@since&amp;nbsp;2.0.8
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;isTraversable($var)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;is_array($var)&amp;nbsp;||&amp;nbsp;$var&amp;nbsp;instanceof&amp;nbsp;\Traversable;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;检测是否为一个数组或者&amp;nbsp;[[\Traversable]]&amp;nbsp;是另一个数组的子集还是&amp;nbsp;[[\Traversable]]。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;这个方法将返回&amp;nbsp;`true`，如果&amp;nbsp;`$needles`&amp;nbsp;所有的元素都包含在&amp;nbsp;`$haystack`。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;如果至少缺少一个元素的话，将被返回&amp;nbsp;`false`。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array|\Traversable&amp;nbsp;$needles&amp;nbsp;这个值必须&amp;nbsp;**all**&amp;nbsp;在&amp;nbsp;`$haystack`&amp;nbsp;存在。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array|\Traversable&amp;nbsp;$haystack&amp;nbsp;要搜索的值。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;bool&amp;nbsp;$strict&amp;nbsp;是否启用&amp;nbsp;(`===`)&amp;nbsp;比较。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@throws&amp;nbsp;InvalidArgumentException&amp;nbsp;如果&amp;nbsp;`$haystack`&amp;nbsp;或者&amp;nbsp;`$needles`&amp;nbsp;既不能遍历也不是数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&amp;nbsp;如果&amp;nbsp;`$needles`&amp;nbsp;存在于&amp;nbsp;`$haystack`&amp;nbsp;返回&amp;nbsp;`true`，否则返回&amp;nbsp;`false`。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@since&amp;nbsp;2.0.7
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;isSubset($needles,&amp;nbsp;$haystack,&amp;nbsp;$strict&amp;nbsp;=&amp;nbsp;false)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(is_array($needles)&amp;nbsp;||&amp;nbsp;$needles&amp;nbsp;instanceof&amp;nbsp;\Traversable)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($needles&amp;nbsp;as&amp;nbsp;$needle)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!static::isIn($needle,&amp;nbsp;$haystack,&amp;nbsp;$strict))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;true;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;new&amp;nbsp;InvalidArgumentException(&amp;#39;Argument&amp;nbsp;$needles&amp;nbsp;must&amp;nbsp;be&amp;nbsp;an&amp;nbsp;array&amp;nbsp;or&amp;nbsp;implement&amp;nbsp;Traversable&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;根据指定的规则筛选数组。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;比如：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```php
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$array&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;A&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[1,&amp;nbsp;2],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;B&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;C&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;1,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;D&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;2,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;E&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;1,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;\yii\helpers\ArrayHelper::filter($array,&amp;nbsp;[&amp;#39;A&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;$result&amp;nbsp;will&amp;nbsp;be:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;A&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[1,&amp;nbsp;2],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;\yii\helpers\ArrayHelper::filter($array,&amp;nbsp;[&amp;#39;A&amp;#39;,&amp;nbsp;&amp;#39;B.C&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;$result&amp;nbsp;will&amp;nbsp;be:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;A&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[1,&amp;nbsp;2],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;B&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[&amp;#39;C&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;1],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;\yii\helpers\ArrayHelper::filter($array,&amp;nbsp;[&amp;#39;B&amp;#39;,&amp;nbsp;&amp;#39;!B.C&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;$result&amp;nbsp;will&amp;nbsp;be:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;B&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[&amp;#39;D&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;2],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;//&amp;nbsp;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;```
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$array&amp;nbsp;源数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;array&amp;nbsp;$filters&amp;nbsp;定义应该从结果中保留或删除的数组键的规则。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;具体规则如下：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;-&amp;nbsp;`var`&amp;nbsp;-&amp;nbsp;`$array[&amp;#39;var&amp;#39;]`&amp;nbsp;将被留在数组中。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;-&amp;nbsp;只有&amp;nbsp;`var.key`&amp;nbsp;=&amp;nbsp;`$array[&amp;#39;var&amp;#39;][&amp;#39;key&amp;#39;]&amp;nbsp;将留在数组中。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;-&amp;nbsp;`!var.key`&amp;nbsp;=&amp;nbsp;`$array[&amp;#39;var&amp;#39;][&amp;#39;key&amp;#39;]&amp;nbsp;将从结果集中移除。
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&amp;nbsp;过滤后的数组
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@since&amp;nbsp;2.0.9
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;static&amp;nbsp;function&amp;nbsp;filter($array,&amp;nbsp;$filters)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$forbiddenVars&amp;nbsp;=&amp;nbsp;[];

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($filters&amp;nbsp;as&amp;nbsp;$var)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$keys&amp;nbsp;=&amp;nbsp;explode(&amp;#39;.&amp;#39;,&amp;nbsp;$var);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$globalKey&amp;nbsp;=&amp;nbsp;$keys[0];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$localKey&amp;nbsp;=&amp;nbsp;isset($keys[1])&amp;nbsp;?&amp;nbsp;$keys[1]&amp;nbsp;:&amp;nbsp;null;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($globalKey[0]&amp;nbsp;===&amp;nbsp;&amp;#39;!&amp;#39;)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$forbiddenVars[]&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;substr($globalKey,&amp;nbsp;1),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$localKey,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!array_key_exists($globalKey,&amp;nbsp;$array))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($localKey&amp;nbsp;===&amp;nbsp;null)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$globalKey]&amp;nbsp;=&amp;nbsp;$array[$globalKey];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!isset($array[$globalKey][$localKey]))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!array_key_exists($globalKey,&amp;nbsp;$result))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$globalKey]&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result[$globalKey][$localKey]&amp;nbsp;=&amp;nbsp;$array[$globalKey][$localKey];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($forbiddenVars&amp;nbsp;as&amp;nbsp;$var)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list($globalKey,&amp;nbsp;$localKey)&amp;nbsp;=&amp;nbsp;$var;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(array_key_exists($globalKey,&amp;nbsp;$result))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unset($result[$globalKey][$localKey]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$result;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 16 Jun 2021 17:50:31 +0800</pubDate></item><item><title>php+Spreadsheet导出多个sheet</title><link>http://lhj.vqilu.cn/?id=179</link><description>&lt;p&gt;产品需求让一键导出多个sheet，脑子里面立马想到了PhpOffer&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;&amp;lt;?php
namespace&amp;nbsp;app\count\logic;
use&amp;nbsp;PhpOffice\PhpSpreadsheet\Spreadsheet;
use&amp;nbsp;PhpOffice\PhpSpreadsheet\Writer\Xlsx;

/**
&amp;nbsp;*&amp;nbsp;按照不同的条件导出
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$data
&amp;nbsp;*&amp;nbsp;auth:lianghuiju@aocyun.com
&amp;nbsp;*&amp;nbsp;time:2021/6/3&amp;nbsp;17:39
&amp;nbsp;*/
public&amp;nbsp;function&amp;nbsp;getExportCountExcel(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$exportRes&amp;nbsp;=&amp;nbsp;array(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;campusList&amp;#39;=&amp;gt;array(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;0&amp;quot;=&amp;gt;array(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;CampusName&amp;#39;=&amp;gt;&amp;#39;学校&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;PreviewTimes&amp;#39;=&amp;gt;&amp;#39;500&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;DateTime&amp;#39;=&amp;gt;&amp;#39;20210610&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;1&amp;quot;=&amp;gt;array(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;CampusName&amp;#39;=&amp;gt;&amp;#39;学校1&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;PreviewTimes&amp;#39;=&amp;gt;&amp;#39;500&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;DateTime&amp;#39;=&amp;gt;&amp;#39;20210610&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;classList&amp;#39;=&amp;gt;array(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;0&amp;quot;=&amp;gt;array(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;CampusName&amp;#39;=&amp;gt;&amp;#39;校区1&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;ClassName&amp;#39;=&amp;gt;&amp;#39;班级1&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;LookBackTotal&amp;#39;=&amp;gt;&amp;#39;34&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;1&amp;quot;=&amp;gt;array(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;CampusName&amp;#39;=&amp;gt;&amp;#39;校区2&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;ClassName&amp;#39;=&amp;gt;&amp;#39;班级2&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;LookBackTotal&amp;#39;=&amp;gt;&amp;#39;8&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;dataAll($exportRes);
}

/**
&amp;nbsp;*&amp;nbsp;格式化标准数据并导出
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$data
&amp;nbsp;*&amp;nbsp;@throws&amp;nbsp;\PhpOffice\PhpSpreadsheet\Writer\Exception
&amp;nbsp;*&amp;nbsp;auth:lianghuiju
&amp;nbsp;*&amp;nbsp;time:2021/6/7&amp;nbsp;18:32
&amp;nbsp;*/
public&amp;nbsp;function&amp;nbsp;dataAll($data){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArr&amp;nbsp;=&amp;nbsp;[];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;=&amp;nbsp;count($lastArr);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(isset($data[&amp;#39;campusList&amp;#39;])){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArr[$num][&amp;#39;title&amp;#39;]&amp;nbsp;=&amp;nbsp;&amp;quot;机构数据&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArr[$num][&amp;#39;rows&amp;#39;][0]&amp;nbsp;=&amp;nbsp;[&amp;#39;学校名称&amp;#39;,&amp;#39;预习平均使用时长&amp;#39;,&amp;#39;学习日期&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$i&amp;nbsp;=&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($data[&amp;#39;campusList&amp;#39;]&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;$value){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArr[$num][&amp;#39;rows&amp;#39;][$i++]=[$value[&amp;#39;CampusName&amp;#39;],$value[&amp;#39;PreviewTimes&amp;#39;],$value[&amp;#39;DateTime&amp;#39;]];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;=&amp;nbsp;count($lastArr);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(isset($data[&amp;#39;classList&amp;#39;])){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArr[$num][&amp;#39;title&amp;#39;]&amp;nbsp;=&amp;nbsp;&amp;quot;校区数据&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArr[$num][&amp;#39;rows&amp;#39;][0]&amp;nbsp;=&amp;nbsp;[&amp;#39;学校名称&amp;#39;,&amp;#39;班级名称&amp;#39;,&amp;#39;预习平均使用时长&amp;#39;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$i&amp;nbsp;=&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($data[&amp;#39;classList&amp;#39;]&amp;nbsp;as&amp;nbsp;$value){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$lastArr[$num][&amp;#39;rows&amp;#39;][$i++]=[$value[&amp;#39;CampusName&amp;#39;],$value[&amp;#39;ClassName&amp;#39;],$value[&amp;#39;LookBackTotal&amp;#39;]];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;xtexport($lastArr);
}

/**
&amp;nbsp;*&amp;nbsp;数据导出
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$data_array
&amp;nbsp;*&amp;nbsp;@throws&amp;nbsp;\PhpOffice\PhpSpreadsheet\Writer\Exception
&amp;nbsp;*&amp;nbsp;auth:lianghuiju
&amp;nbsp;*&amp;nbsp;time:2021/6/7&amp;nbsp;18:15
&amp;nbsp;*/
public&amp;nbsp;&amp;nbsp;function&amp;nbsp;xtexport($data_array)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$name&amp;nbsp;=&amp;nbsp;&amp;#39;学习统计&amp;#39;&amp;nbsp;.&amp;nbsp;date(&amp;quot;Y-m-d&amp;quot;,&amp;nbsp;time());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$spreadsheet&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Spreadsheet();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($data_array&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$data)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;opSheet($spreadsheet,$key,$data);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;header(&amp;#39;Content-Type:&amp;nbsp;application/vnd.ms-excel&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;header(&amp;#39;Content-Disposition:&amp;nbsp;attachment;filename=&amp;quot;&amp;#39;&amp;nbsp;.&amp;nbsp;$name&amp;nbsp;.&amp;nbsp;&amp;#39;.xlsx&amp;quot;&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;header(&amp;#39;Cache-Control:&amp;nbsp;max-age=0&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$writer&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Xlsx($spreadsheet);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$writer-&amp;gt;save(&amp;#39;php://output&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$spreadsheet-&amp;gt;disconnectWorksheets();//删除清空：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unset($spreadsheet);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit;
}

/**
&amp;nbsp;*&amp;nbsp;数据填充到excel
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$spreadsheet
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$n
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$data
&amp;nbsp;*&amp;nbsp;auth:lianghuiju
&amp;nbsp;*&amp;nbsp;time:2021/6/7&amp;nbsp;18:30
&amp;nbsp;*/
private&amp;nbsp;function&amp;nbsp;opSheet($spreadsheet,$n,&amp;nbsp;$data){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$spreadsheet-&amp;gt;createSheet();//创建sheet
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$spreadsheet-&amp;gt;setActiveSheetIndex($n);//设置当前的活动sheet
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$keys&amp;nbsp;=&amp;nbsp;$data[&amp;#39;rows&amp;#39;][0];//这是你的数据键名
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$count&amp;nbsp;=&amp;nbsp;count($keys);//计算你所占的列数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$infoStart&amp;nbsp;=&amp;nbsp;&amp;nbsp;1&amp;nbsp;;//下面的详细信息的开始行数
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$sheet&amp;nbsp;=&amp;nbsp;$spreadsheet-&amp;gt;getActiveSheet($n)-&amp;gt;setTitle($data[&amp;#39;title&amp;#39;]);//设置sheet的名称
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($data[&amp;#39;rows&amp;#39;]&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$item)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;($i&amp;nbsp;=&amp;nbsp;65;&amp;nbsp;$i&amp;nbsp;&amp;lt;&amp;nbsp;$count&amp;nbsp;+&amp;nbsp;65;&amp;nbsp;$i++)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$sheet-&amp;gt;setCellValue(strtoupper(chr($i))&amp;nbsp;.&amp;nbsp;($key+&amp;quot;$infoStart&amp;quot;),&amp;nbsp;$item[$i&amp;nbsp;-&amp;nbsp;65]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Thu, 10 Jun 2021 18:19:27 +0800</pubDate></item><item><title>Filebeat + elasticsearch+kibana日志收集</title><link>http://lhj.vqilu.cn/?id=178</link><description>&lt;h2 style=&quot;text-align:center&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 黑体;font-size: 21px&quot;&gt;Filebeat &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 黑体;font-size: 21px&quot;&gt;+ elasticsearch+kibana&lt;/span&gt;&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 宋体;color: #FF0000;font-size: 20px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;注意：版本一致&lt;/span&gt;7.12.1&lt;span style=&quot;font-family:宋体&quot;&gt;，&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;linux&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;环境下安装&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;路径：&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;/usr/local/soft&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 宋体;font-size: 21px&quot;&gt;1.filebeat&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;官方文档：&lt;/span&gt;https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation-configuration.html&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;下载地址：&lt;/span&gt;https://www.elastic.co/cn/downloads/beats/filebeat&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;安装步骤：&lt;/span&gt;linux &lt;span style=&quot;font-family:宋体&quot;&gt;安装&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.12.1-linux-x86_64.tar.gz&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;tar xzvf filebeat-7.12.1-linux-x86_64.tar.gz&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;进入目录&lt;/span&gt; cd &amp;nbsp;/usr/local/soft/filebeat/filebeat-7.12.1-linux-x86_64/modules.d&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;执行&lt;/span&gt; &amp;nbsp;./filebeat modules list &lt;span style=&quot;font-family:宋体&quot;&gt;（启动和编辑收集）&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;执行&lt;/span&gt; ./filebeat modules enable system nginx mysql &lt;span style=&quot;font-family:宋体&quot;&gt;（启用一个&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;多个模块，&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;nginx&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;和&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;mysql&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;）&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;进入目录：&lt;/span&gt;cd &amp;nbsp;/usr/local/soft/filebeat/filebeat-7.12.1-linux-x86_64/modules.d&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;修改&lt;/span&gt;nginx.yml&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2021/05/202105131620874372904442.png&quot; alt=&quot;图片1.png&quot; width=&quot;791&quot; height=&quot;551&quot; style=&quot;width: 791px; height: 551px;&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: 宋体;&quot;&gt;修改完文件保存：执行这个文本 &lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 宋体;&quot;&gt;./filebeat test config -e &amp;nbsp;检测你的配置是不是对&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;继续执行：&lt;/span&gt; ./filebeat setup -e &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;font-family:宋体&quot;&gt;（确保你又权限执行）&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;最后启动：&lt;/span&gt; ./filebeat -e&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2021/05/202105131620874490710156.png&quot; alt=&quot;图片1.png&quot; width=&quot;800&quot; height=&quot;105&quot; style=&quot;width: 800px; height: 105px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;color:#FF0000;font-size:14px&quot;&gt;需要注意的是：&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;;text-indent: 0;padding: 0;line-height: 21px;background: rgb(52, 55, 65)&quot;&gt;&lt;span style=&quot;font-family: Consolas;color: #F5F7FA;letter-spacing: 0;font-size: 14px&quot;&gt;setup.ilm.&lt;/span&gt;&lt;span style=&quot;font-family: Consolas;color: #1BA9F5;letter-spacing: 0;font-size: 14px&quot;&gt;enabled: &lt;/span&gt;&lt;span style=&quot;font-family: Consolas;color: #F5F7FA;letter-spacing: 0;font-size: 14px&quot;&gt;auto&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;;text-indent: 0;padding: 0;line-height: 21px;background: rgb(52, 55, 65)&quot;&gt;&lt;span style=&quot;font-family: Consolas;color: #F5F7FA;letter-spacing: 0;font-size: 14px&quot;&gt;setup.ilm.&lt;/span&gt;&lt;span style=&quot;font-family: Consolas;color: #1BA9F5;letter-spacing: 0;font-size: 14px&quot;&gt;rollover_alias: &lt;/span&gt;&lt;span style=&quot;font-family: Consolas;color: #ADEFFF;letter-spacing: 0;font-size: 14px&quot;&gt;&amp;quot;filebeat&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;;text-indent: 0;padding: 0;line-height: 21px;background: rgb(52, 55, 65)&quot;&gt;&lt;span style=&quot;font-family: Consolas;color: #F5F7FA;letter-spacing: 0;font-size: 14px&quot;&gt;setup.ilm.&lt;/span&gt;&lt;span style=&quot;font-family: Consolas;color: #1BA9F5;letter-spacing: 0;font-size: 14px&quot;&gt;pattern: &lt;/span&gt;&lt;span style=&quot;font-family: Consolas;color: #ADEFFF;letter-spacing: 0;font-size: 14px&quot;&gt;&amp;quot;{now/d}-000001&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-family: Consolas;color: #F5F7FA;letter-spacing: 0;font-size: 14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;#CO22-1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;Filebeats&lt;span style=&quot;font-family:宋体&quot;&gt;从版本&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;7.0&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;起，生命周期需要自己管理&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;es&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;的索引了，&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;收集多个项目并按照不用的索引展示信息：配置文件&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;#&amp;nbsp;==============================&amp;nbsp;Filebeat&amp;nbsp;inputs&amp;nbsp;===============================
filebeat.inputs:
-&amp;nbsp;type:&amp;nbsp;log
&amp;nbsp;&amp;nbsp;#&amp;nbsp;Change&amp;nbsp;to&amp;nbsp;true&amp;nbsp;to&amp;nbsp;enable&amp;nbsp;this&amp;nbsp;input&amp;nbsp;configuration.
&amp;nbsp;&amp;nbsp;enabled:&amp;nbsp;true
&amp;nbsp;&amp;nbsp;#&amp;nbsp;Paths&amp;nbsp;that&amp;nbsp;should&amp;nbsp;be&amp;nbsp;crawled&amp;nbsp;and&amp;nbsp;fetched.&amp;nbsp;Glob&amp;nbsp;based&amp;nbsp;paths.
&amp;nbsp;&amp;nbsp;paths:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#-&amp;nbsp;/var/log/*.log
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;/www/tp5/runtime/log/*/*.log
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#-&amp;nbsp;c:\programdata\elasticsearch\logs\*
&amp;nbsp;&amp;nbsp;fields:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;indexprefix:&amp;nbsp;&amp;quot;tplog_5&amp;quot;
&amp;nbsp;&amp;nbsp;json.add_error_key:&amp;nbsp;true
-&amp;nbsp;type:&amp;nbsp;log
&amp;nbsp;&amp;nbsp;enabled:&amp;nbsp;true
&amp;nbsp;&amp;nbsp;paths:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;nbsp;/www/csy-vclass-osc-console/runtime/log/*/*.log
&amp;nbsp;&amp;nbsp;fields:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;indexprefix:&amp;nbsp;&amp;quot;tplog_osc&amp;quot;
#&amp;nbsp;----------------------------&amp;nbsp;Elasticsearch&amp;nbsp;Output&amp;nbsp;----------------------------
setup.ilm.enabled:&amp;nbsp;false
setup.template.name:&amp;nbsp;&amp;quot;thinkphp_log&amp;quot;
setup.template.pattern:&amp;nbsp;&amp;quot;thinkphp_log-*&amp;quot;

output.elasticsearch:
&amp;nbsp;&amp;nbsp;#&amp;nbsp;Array&amp;nbsp;of&amp;nbsp;hosts&amp;nbsp;to&amp;nbsp;connect&amp;nbsp;to.
&amp;nbsp;&amp;nbsp;hosts:&amp;nbsp;[&amp;quot;127.0.0.1:9200&amp;quot;]
&amp;nbsp;&amp;nbsp;index:&amp;nbsp;&amp;quot;%{[fields][indexprefix]}-%{+yyyy.MM.dd}&amp;quot;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 黑体;font-size: 21px&quot;&gt;2.elasticsearch&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;官方文档：&lt;/span&gt;https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.12.1-linux-x86_64.tar.gz&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;安装：&lt;/span&gt;tar -xzf elasticsearch-7.12.1-linux-x86_64.tar.gz&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;目录：&lt;/span&gt;cd elasticsearch-7.12.1/ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 宋体;color: #FF0000;font-size: 14px&quot;&gt;需要注意的是：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;新版的&lt;/span&gt;elasticsearch&lt;span style=&quot;font-family:宋体&quot;&gt;，不让用&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;root&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;用户启动，所以你需要新建一个新的用户再去执行&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;我这边把整合&lt;/span&gt;elasticsearch&lt;span style=&quot;font-family:宋体&quot;&gt;设置新的权限&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;useradd &lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;lianghuiju &lt;span style=&quot;font-family:宋体&quot;&gt;新增用户&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;passwd lianghuiju &amp;nbsp;&lt;span style=&quot;font-family:宋体&quot;&gt;设置密码&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;chown &lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;lianghuiju&lt;/span&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;lianghuiju&lt;/span&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;elasticsearch &amp;nbsp;&lt;span style=&quot;font-family:宋体&quot;&gt;整个文件用&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;lianghuiju&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;用户执行&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;chown 777 elasticsearch &amp;nbsp;lianghuiju&lt;span style=&quot;font-family:宋体&quot;&gt;用户有最高的权限&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;执行：&lt;/span&gt;./bin/elasticsearch&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 宋体;color: #FF0000;font-size: 14px&quot;&gt;在需要注意点：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;elasticsearch &amp;nbsp;&lt;span style=&quot;font-family:宋体&quot;&gt;外网不能访问，&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;修改&lt;/span&gt; &amp;nbsp;vim &amp;nbsp;/usr/local/soft/elasticsearch/elasticsearch-7.12.1/config/elasticsearch.yml&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2021/05/202105131620874537592982.png&quot; alt=&quot;图片1.png&quot; width=&quot;782&quot; height=&quot;367&quot; style=&quot;width: 782px; height: 367px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 宋体;&quot;&gt;但是我不可以，需要代理转发出去&lt;/span&gt;&lt;span style=&quot;font-family: 宋体;&quot;&gt; &amp;nbsp;Nginx &lt;/span&gt;&lt;span style=&quot;font-family: 宋体;&quot;&gt;配置&lt;/span&gt;&lt;span style=&quot;font-family: Calibri;&quot;&gt;TCP&lt;/span&gt;&lt;span style=&quot;font-family: 宋体;&quot;&gt;代理转发出去：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;vim &amp;nbsp;&amp;nbsp;/usr/local/soft/openresty/nginx/conf/nginx.conf&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;stream {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_format proxy &amp;#39;$remote_addr [$time_local] &amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;$protocol $status $bytes_sent $bytes_received &amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;$session_time &amp;quot;$upstream_addr&amp;quot; &amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;quot;$upstream_bytes_sent&amp;quot; &amp;quot;$upstream_bytes_received&amp;quot; &amp;quot;$upstream_connect_time&amp;quot;&amp;#39;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;access_log /mydata/logs/tcp-access.log proxy ;&lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;#&lt;span style=&quot;font-family:宋体&quot;&gt;日志地址需要你&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;open_log_file_cache off;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;include tcpConf/*.conf;&lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;# &lt;span style=&quot;font-family:宋体&quot;&gt;统一放置，方便管理&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;在&lt;/span&gt;/usr/local/soft/openresty/nginx/conf&lt;span style=&quot;font-family:宋体&quot;&gt;目录里面需要常见一个文件夹&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;tcpConf&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;在&lt;/span&gt;/usr/local/soft/openresty/nginx/conf/tcpConf&lt;span style=&quot;font-family:宋体&quot;&gt;里面创建一个&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;tcp9004.conf&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;内容：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;upstream tcp9004 {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server 127.0.0.1:9200;//&lt;span style=&quot;font-family:宋体&quot;&gt;把&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;9200&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;代理出去，端口用&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;9004&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;server {&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;listen 9004;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_connect_timeout 8s;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_timeout 24h;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proxy_pass tcp9004;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;记得服务器重启：&lt;/span&gt;service nginx restart &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2021/05/202105131620874719399576.png&quot; alt=&quot;图片1.png&quot; width=&quot;786&quot; height=&quot;362&quot; style=&quot;width: 786px; height: 362px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 黑体;font-size: 21px&quot;&gt;3.kibana&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;文档地址：&lt;/span&gt;&lt;a href=&quot;https://www.elastic.co/cn/start&quot;&gt;&lt;span style=&quot;text-decoration:underline;&quot;&gt;&lt;span style=&quot;font-family: 宋体;color: #0000FF&quot;&gt;https://www.elastic.co/cn/start&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;下载&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;curl -O &lt;/span&gt;&lt;a href=&quot;https://artifacts.elastic.co/downloads/kibana/kibana-7.12.1-linux-x86_64.tar.gz&quot;&gt;&lt;span style=&quot;text-decoration:underline;&quot;&gt;&lt;span style=&quot;font-family: &amp;#39;Times New Roman&amp;#39;;color: #0000FF&quot;&gt;https://artifacts.elastic.co/downloads/kibana/kibana-7.12.1-linux-x86_64.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;解压&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;tar -xzf kibana-7.12.1-linux-x86_64.tar.gz&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;进入目录&lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;cd kibana-7.12.1-linux-x86_64/ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;执行&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;./bin/kibana&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-family: 宋体;color: #FF0000;font-size: 14px&quot;&gt;注意：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;Kibana&lt;span style=&quot;font-family:宋体&quot;&gt;和&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;es&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;是一样的，也不让&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;root&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;用户启动&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;配置文件：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;i18n.locale: &amp;quot;zh-CN&amp;quot;&lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;#kibana&lt;span style=&quot;font-family:宋体&quot;&gt;展示为中文&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;elasticsearch.hosts: [&amp;quot;http://192.168.56.101:9004&amp;quot;]&lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;#&lt;span style=&quot;font-family:宋体&quot;&gt;配置好&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;es&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;kibana.index: &amp;quot;.kibana&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;server.port: 5601&lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&lt;span style=&quot;font-family:宋体&quot;&gt;启动端口&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;server.host: &amp;quot;192.168.56.101&amp;quot;&lt;/span&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&amp;nbsp;#kibana&lt;span style=&quot;font-family:宋体&quot;&gt;配置&lt;/span&gt;&lt;span style=&quot;font-family:Calibri&quot;&gt;ip&lt;/span&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;便于外网访问&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:宋体;font-size:14px&quot;&gt;&lt;span style=&quot;font-family:宋体&quot;&gt;进入虚拟机需要看你自己的&lt;/span&gt;ip&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&lt;img src=&quot;http://lhj.vqilu.cn/zb_users/upload/2021/05/202105131620874760290875.png&quot; alt=&quot;图片1.png&quot; width=&quot;792&quot; height=&quot;351&quot; style=&quot;width: 792px; height: 351px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;;font-family:Calibri;font-size:14px&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Thu, 13 May 2021 10:50:29 +0800</pubDate></item><item><title>流量并发控制常用的方法</title><link>http://lhj.vqilu.cn/?id=177</link><description>&lt;p&gt;在最近几天的面试中，老被面试问到，对于大流量高并发的情况下，怎么做到并发流量控制&lt;/p&gt;&lt;p&gt;1.计数器&amp;nbsp;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;&amp;lt;?php
/**
&amp;nbsp;*&amp;nbsp;计数器来限流
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$uid&amp;nbsp;&amp;nbsp;用户的uid
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$actionKey&amp;nbsp;&amp;nbsp;任务名的key
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;int&amp;nbsp;$limitTime&amp;nbsp;多长时间
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;int&amp;nbsp;$maxCount&amp;nbsp;访问的最大次数
&amp;nbsp;*/
function&amp;nbsp;countingFlow($uid,$actionKey,$limitTime=60,$maxCount=100){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(empty($uid)&amp;nbsp;||&amp;nbsp;empty($actionKey)){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$redis&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Redis();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$redis-&amp;gt;connect(&amp;quot;127.0.0.1&amp;quot;,6379);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$redis-&amp;gt;auth(&amp;quot;foobared&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$redisKey&amp;nbsp;=&amp;nbsp;sprintf(&amp;quot;hist:%s:%s&amp;quot;,$uid,$actionKey);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$count&amp;nbsp;=&amp;nbsp;$redis-&amp;gt;incr($redisKey);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($count&amp;nbsp;==&amp;nbsp;1){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$redis-&amp;gt;expire($redisKey,$limitTime);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($count&amp;nbsp;&amp;gt;&amp;nbsp;$maxCount){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;true;
}&lt;/pre&gt;&lt;p&gt;注意：&lt;/p&gt;&lt;pre class=&quot;brush:php;toolbar:false line-numbers language-php&quot; style=&quot;padding: 1em 1em 1em 3.8em; color: rgb(248, 248, 242); background-color: rgb(39, 40, 34); text-shadow: rgba(0, 0, 0, 0.3) 0px 1px; font-family: Consolas, Monaco, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, monospace; white-space: pre-wrap; word-break: normal; overflow-wrap: normal; line-height: 1.5; tab-size: 4; hyphens: none; overflow: auto; border-radius: 0.3em; position: relative; counter-reset: linenumber 0; font-size: medium;&quot;&gt;临界问题：
在第一次0-58秒之内有1个请求，在59秒内突然来了15个请求，这个时候已经到了1分钟计数器会重置。
第二次的1秒内（1分0秒）又有了15个请求，这个时候是不是就在2秒内有30个请求被放行了呢？（59秒，1分0秒），如果某个服务器的访问只能是20次请求，那么这种限流方式已经导致服务器挂掉了。&lt;/pre&gt;&lt;p&gt;2.滑动窗口计数器&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;&amp;lt;?php
/**
&amp;nbsp;*&amp;nbsp;滑动窗口计数器来限流
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$uid&amp;nbsp;&amp;nbsp;用户的uid
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;$actionKey&amp;nbsp;&amp;nbsp;任务名的key
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;int&amp;nbsp;$period&amp;nbsp;时间&amp;nbsp;毫秒
&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;int&amp;nbsp;$maxCount&amp;nbsp;最大次数
&amp;nbsp;*/
function&amp;nbsp;isActionAllowed($uid,$actionKey,$period,$maxCount=100){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(empty($uid)&amp;nbsp;||&amp;nbsp;empty($actionKey)){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$redis&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Redis();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$redis-&amp;gt;connect(&amp;quot;127.0.0.1&amp;quot;,6379);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$redis-&amp;gt;auth(&amp;#39;foobared&amp;#39;);&amp;nbsp;//密码验证

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$now&amp;nbsp;=&amp;nbsp;msectime();//毫秒时间戳
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$maxCount&amp;nbsp;=&amp;nbsp;1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//拼接key
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$redisKey&amp;nbsp;=&amp;nbsp;sprintf(&amp;#39;miaosha:%s:%s&amp;#39;,$uid,$actionKey);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//事务开始客户端请求&amp;nbsp;客户端缓存
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$pipe&amp;nbsp;=&amp;nbsp;$redis-&amp;gt;multi(Redis::PIPELINE);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//value&amp;nbsp;和&amp;nbsp;score&amp;nbsp;都用毫秒时间戳
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$pipe-&amp;gt;zAdd($redisKey,$now,$now);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//移除时间窗口之前的行为记录，剩下的都是时间窗口
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$pipe-&amp;gt;zRemRangeByScore($redisKey,0,$now&amp;nbsp;-&amp;nbsp;$period);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$pipe-&amp;gt;zCard($redisKey);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//获取窗口内的行为数量
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//多加1秒的过期时间
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$pipe-&amp;gt;expire($redisKey,$period+1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$res&amp;nbsp;=&amp;nbsp;$pipe-&amp;gt;exec();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$res[2]&amp;nbsp;&amp;lt;&amp;nbsp;$maxCount;

}&lt;/pre&gt;&lt;p&gt;3.令牌桶限流&lt;br/&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp;所有的请求之前都需要那个令牌&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp;根据限流的大小按照一定的速率往桶中放令牌&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp;桶需要限制一个最大的令牌数，当桶满的的时候，新增的令牌就得被丢弃或者拒绝&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;请求先拿着令牌才能进行自己的业务逻辑然后处理完删除&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;令牌有最低限额，当桶中的限额达到最低令牌时，请求处理完也不会删除令牌，以达到最终限流&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;&amp;lt;?php
&amp;lt;?php

class&amp;nbsp;Token
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;$_max;//最大的令牌
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;$_queue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;$_redis;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;__construct()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;_redis&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Redis();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;_redis-&amp;gt;connect(&amp;quot;127.0.0.1&amp;quot;,&amp;nbsp;6379);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;_redis-&amp;gt;auth(&amp;quot;foobared&amp;quot;);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;_queue&amp;nbsp;=&amp;nbsp;&amp;quot;token&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;_max&amp;nbsp;=&amp;nbsp;10;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(RedisException&amp;nbsp;$exception)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;&amp;nbsp;new&amp;nbsp;Exception($exception-&amp;gt;__toString());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;令牌初始化
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;resertKey()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;_redis-&amp;gt;del($this-&amp;gt;_queue);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;_add($this-&amp;gt;_max);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;添加令牌
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;int&amp;nbsp;$number
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;add($number&amp;nbsp;=&amp;nbsp;1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$maxNum&amp;nbsp;=&amp;nbsp;$this-&amp;gt;_max;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$currentNumber&amp;nbsp;=&amp;nbsp;$this-&amp;gt;_redis-&amp;gt;lLen($this-&amp;gt;_queue);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($maxNum&amp;nbsp;&amp;gt;&amp;nbsp;$currentNumber&amp;nbsp;+&amp;nbsp;$number)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$number&amp;nbsp;=&amp;nbsp;$number;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$number&amp;nbsp;=&amp;nbsp;$maxNum&amp;nbsp;-&amp;nbsp;$currentNumber;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($number&amp;nbsp;&amp;gt;&amp;nbsp;0)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$tokens&amp;nbsp;=&amp;nbsp;array_fill(0,&amp;nbsp;$number,&amp;nbsp;1);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;($tokens&amp;nbsp;as&amp;nbsp;$token)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$this-&amp;gt;_redis-&amp;gt;lPush($this-&amp;gt;_queue,&amp;nbsp;$token);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;获取令牌
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;get()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$this-&amp;gt;_redis-&amp;gt;rPop($this-&amp;gt;_queue)&amp;nbsp;?&amp;nbsp;true&amp;nbsp;:&amp;nbsp;false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #4D4D4D; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif, SimHei, SimSun; font-size: 16px; background-color: #FFFFFF;&quot;&gt;消费类：模拟用户请求&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;&amp;lt;?php
require&amp;nbsp;&amp;#39;token.php&amp;#39;;
$token&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Token();
var_dump($token-&amp;gt;get());&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #4D4D4D; font-family: -apple-system, &amp;quot;SF UI Text&amp;quot;, Arial, &amp;quot;PingFang SC&amp;quot;, &amp;quot;Hiragino Sans GB&amp;quot;, &amp;quot;Microsoft YaHei&amp;quot;, &amp;quot;WenQuanYi Micro Hei&amp;quot;, sans-serif, SimHei, SimSun; font-size: 16px; background-color: #FFFFFF;&quot;&gt;投递类：后端向令牌桶投递&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;&amp;lt;?php
require&amp;nbsp;&amp;#39;token.php&amp;#39;;
$token&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Token();
$token-&amp;gt;add(1);&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Sun, 25 Apr 2021 17:10:14 +0800</pubDate></item></channel></rss><!--68.39 ms , 6 query , 396kb memory , 1 error-->