php
文章平均质量分 72
Thepatterraining
这个作者很懒,什么都没留下…
展开
-
php实现归并排序算法
php实现归并排序算法归并排序算法的复杂度是O(nlogn)。代码如下,完整代码在github上面,只需要clone下来执行composer install然后执行 php artisan test:mergeSort 就可以看到结果了 /** * 归并排序把数据逐步分解,然后对分解后的数据进行排序,最后合并到一起 * * @return mixed */ public function handle() { $this-&原创 2022-03-07 16:38:30 · 396 阅读 · 2 评论 -
有序数组去重算法
有序数组去重算法有序数组去重算法的复杂度是O(n)。代码如下,只进行一次循环,复杂度O(n)完整代码在github上面,只需要clone下来执行composer install然后执行 php artisan test:sortDeduplicate 就可以看到结果了 /** * 因为是有序数组,为了提高去重效率,取一个元素往后一直比对,如果相邻的相等表示是重复的 * 继续往后,直到不相等,也就是遇到一个不重复的为止,将这个不重复的元素移动到该元素的下一个 * 然原创 2022-02-18 17:31:28 · 406 阅读 · 0 评论 -
无序数组去重算法
无序数组去重算法无序数组去重算法的复杂度是O(n2)。代码如下,首先进行外层循环,复杂度O(n),然后查找这个元素之前的元素中有没有重复的,复杂度O(n),如果有就删除,复杂度O(1),没有就下一个元素,复杂度O(1)。加起来复杂度O(n2)。完整代码在github上面,只需要clone下来执行composer install然后执行 php artisan test:unsortDeduplicate 就可以看到结果了 /** * Execute the console comma原创 2022-02-18 14:45:57 · 824 阅读 · 0 评论 -
PHP-elasticsearch/elasticsearch包分词功能实现及源码解析
安装直接使用 composer 安装 ES 包就可以了,这里使用官方的 elasticsearch/elasticsearch 这个包。composer require elasticsearch/elasticsearch安装好以后,创建一个客户端。hosts如果是多个节点的集群,那么可以配置一个二维数组。$hosts = [ 'host' => '127.0.0.1', 'port' => '9200', 's原创 2022-01-19 11:22:10 · 2021 阅读 · 0 评论 -
ubuntu安装supervisor守护进程
supervisorsupervisor是一个守护进程软件。安装ubuntu安装很简单。直接aptsudo apt-get install supervisor配置修改配置项,加入我们的命令sudo vim /etc/supervisor/conf.d/test.conf复制下面的内容[program:命令名称];目录;directory=/test 这里我注释掉了,如果你加上以后报错可以注释掉试试;执行的命令如果没有配置环境变量或者软连接请使用全路径command=php /原创 2020-12-10 15:29:15 · 1813 阅读 · 0 评论 -
wsl安装php nginx环境和phpredis扩展
wslwsl是可以在windows里面运行linux的一个软件。是微软官方发行的。安装php从php官网下载php tar包。 sudo wget https://www.php.net/distributions/php-7.4.12.tar.gz然后解压sudo tar -zxvf php-7.4.12.tar.gz接下来需要安装一些扩展来支持php。sudo apt-get install gcc make pkg-config libxml2-dev libssl-dev lib原创 2020-12-09 14:48:41 · 554 阅读 · 0 评论 -
php yii2框架前端加载css和js文件的方法
php yii2框架前端加载css和js文件的方法这两天有一个以前的项目是用yii2框架写的,前后端没有做分离,现在需要用vue接手后续的前端开发。把vue的项目放到yii2里面,这时候遇到一个加载静态资源的问题,原来html的引用方式不管用了。后来看到yii2官方文档里面,需要改一下引用方式。改成下面这样就可以了。$this->registerCssFile("@web/static_vue/css/index.css")$this->registerJsFile("@web/st原创 2020-09-14 17:46:38 · 279 阅读 · 0 评论 -
php-thinkphp-报错Creating default object from empty value
php-thinkphp-报错Creating default object from empty value报错第一步,打印,打印日志,在你用到对象的地方,把对象都打印出来看看,你以为他是个对象,但他。。。不一定是个对象!!!如果你确定你从数据库查询出来的没有错,是个对象,那么。。请看一下你别的对象是不是一个对象!!!要相信报错,一定是对象错了,但你不确定,所以,请打印日志,如果你这里没问题,别人那里有问题,那么可能是参数的问题。打印日志在别人那就能看到你想的对象可能在他那里不是一个对象!!!.原创 2020-08-25 11:38:50 · 1285 阅读 · 0 评论 -
php-simplexml解析一个或多个结构的坑
php-simplexml解析一个或多个结构的坑php解析xml还是挺方便的,不管是正常的xml,还是加了一个命名空间或者前缀的xml。都可以通过simplexml_load_string函数来解析成数组或者对象。simplexml_load_string来看一下使用方法。$xml = "<reports><report><id>1</id><name>张三</name></report></reports&g原创 2020-08-25 11:25:06 · 234 阅读 · 0 评论 -
php-mpdf扩展包中文乱码问题
php-mpdf扩展包中文乱码问题mpdf是一个可以把html网页转换成pdf文件的扩展包。一开始使用的时候,发现中文乱码了。。在网上查了半天,好多方法都不管用。最后,在他的文档里面找到了问题原因。想要输出中文,有两个参数至关重要!!!autoLangToFont 这个值一定要设置为true才可以autoScriptToLang 这个值也一定要设置为true才可以只要上面两个设置为true,那么你的中文就可以正常输出了。相信我,不能正常输出你来打我。看一下mpdf文档上面的描述。!(mp原创 2020-08-24 13:30:12 · 1806 阅读 · 2 评论 -
laravel竟是最慢框架,比lumen慢了一倍?就连tp都比laravel快50%?来这里看框架性能大对比
laravel-lumen-tp框架性能对比php的开源框架有很多,常用的像laravel,tp,ci,yii等等。每个框架都有各自的优缺点,像laravel比较臃肿,但是集成的功能比较多,像完备的artisan命令行,orm模型,observer,listener,好用的di容器实现依赖注入等等,还有很多生态,扩展。对于tp我只有最早用过tp3.2版本,后来tp5只是有些了解。最近发现tp6出了,而且跟laravel更像了,也搞出来了think命令行,和orm模型,就连orm的使用方法也差不多。其他原创 2020-05-22 14:59:36 · 3377 阅读 · 2 评论 -
laravel-react实战打造企业级高并发分布式电商小程序(三)--权限管理的前端
laravel-react实战打造企业级高并发分布式电商小程序(三)–权限管理的前端react我们前端使用react来做,我们这个后台基于antd pro。使用npm创建它。npm create umi选择 ant-design-proSelect the boilerplate type (Use arrow keys)❯ ant-design-pro - Create project with an layout-only ant-design-pro boilerplate, us原创 2020-05-20 14:41:06 · 954 阅读 · 2 评论 -
php冒泡排序算法实现
php冒泡排序算法实现冒泡排序是经典排序算法,也是最好实现,最容易记住的排序算法。不过冒泡排序的时间复杂度是O(n2)。时间比较长,总体性能上还不如插入排序这个同样是O(n2)复杂度的排序算法。/** * 冒泡排序 */class BubbleSort { /** * 冒泡排序 * @param Array $arr 要排序的数组 * @return Array $arr 排好序的数组 */ static function sort(A原创 2020-05-14 15:39:30 · 439 阅读 · 0 评论 -
php快速排序算法实现
php快速排序算法实现快速排序是一个经典排序算法,他的排序速度更快,所以叫做快排。像冒泡,插入,选择这种排序的时间复杂度是O(n^2),而快排的时间复杂度是O(nlogn),速度快上不少。快排的原理是选定一个值,然后把数组中所有小于这个值的放左边,大于的放右边,然后对左边和右边的数组重复上述操作。选定一个值小于的放左边大于的放右边重复上述操作,也就是递归最后得到的就是排好序的数组/** * 快速排序 */class QuickSort { /** * 快速排原创 2020-05-14 15:49:27 · 460 阅读 · 0 评论 -
php索引数组竟然无法json转换?原因竟然是这样。。。
php索引数组php分为索引数组和关联数组,索引数组就是0,1,2开始的数字下标的数组。json_encodejson是我们经常用到的数据格式。我们往往会把一个数组进行json_encode来变成一个json格式的数组。但是如果你尝试把一个索引数组进行转换,你会发现转换失败。比如$arr1 = [1,2,3];dump(json_encode($arr1));上面的输出结果是:[1,2,3]是不是很惊讶呢?我一开始也是,不信的可以自己试一试。后来我在官方文档上翻到了json_enco原创 2020-05-14 14:05:00 · 528 阅读 · 0 评论 -
用了这么久unset函数,现在才知道原理是这样
用了这么久unset函数,现在才知道原理是这样php unsetunset()这个函数应该都用过,用来清除变量,删除变量。现在有一个问题,比如$a = 'abc';$b = &$a;echo $b;那么这时候$b也是’abc’。这两个变量指向同一个内存地址。如果现在//...unset($a);echo $b;会是什么结果呢?答案是abc这是为什么呢?明明两个变量指向同一个内存地址。原因是unset只是删除了这个变量,也就是删除了这个变量的指针,但是并没有删除原创 2020-05-14 13:49:31 · 615 阅读 · 0 评论 -
设计模式之中介模式--房产中介的原理
设计模式之中介模式–房产中介的原理中介模式就是大白话中介,出现一个中介解耦其他角色。用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的互相引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。为什么要使用中介模式尽管将一个系统分割成许多对象会增加复用性,但是对象间互相连接的激增又会降低复用性。因为大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难了。这是因为多个对象间互相耦合的原因,产生了很多依原创 2020-05-09 13:40:57 · 1054 阅读 · 0 评论 -
设计模式之解释器模式--语法解释器的实现原理
设计模式之解释器模式–语法解释器的实现原理解释器模式就是把一个东西解释成另外一个东西,比如中文解释成英文。给定一个语言,定义它的文法的一种表示,比定义一个解释器,这个解释器使用该表示来解释语言中的句子。为什么要使用解释器模式当你需要解释一个东西的时候,这个模式才能发生作用。这个模式在实际项目中用的比较少,除非写一些通用框架的时候才会用到。一般在框架和语言层面使用。比如java解释器,php解释器这些语言解释器,还有mysql里面的语法解释器这些需特定语法的才需要这个模式。比如正则,当使用正原创 2020-05-09 13:02:29 · 273 阅读 · 0 评论 -
设计模式之命令模式--php实现命令模式
设计模式之命令模式–php实现命令模式命令模式就是把命令封装成对象。将一个请求封装为对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录日志,以及支持可撤销的操作。为什么要使用命令模式命令模式有哪些好处呢?他能较容易的设计一个命令队列在需要的情况下,可以较容易的将命令写入日志允许接受请求的一方决定是否要否决请求可以容易的实现对请求的撤销和重做加入新的命令类更加容易命令模式把请求一个操作的对象和直到怎么执行一个操作的对象分隔开。比如服务员把操作的请求者客户和操作的执行者原创 2020-05-09 12:03:13 · 136 阅读 · 0 评论 -
设计模式之备忘录模式--代码也有后悔药
设计模式之备忘录模式–代码也有后悔药备忘录模式就是做个备份,可以实现撤销,游戏存档这样的功能。在不破坏封装性前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将这个对象恢复到原先保存的状态。为什么要使用备忘录模式备忘录模式也是一个很少用到的模式,毕竟现在很多都有备份功能了。只有当你需要回到之前状态的时候才需要备忘录模式。比如撤销功能,比如回退功能,比如游戏存档,说白了就是备份效果。只不过自带了备份效果。php实现备忘录模式既然是备忘录模式,那么应该有你要备份什么,备份原创 2020-05-08 21:15:43 · 206 阅读 · 0 评论 -
设计模式之访问者模式--你永远用不上的设计模式
设计模式之访问者模式–你永远用不上的设计模式访问者模式是解耦数据和操作,但是数据必须是稳定的,这样使增加操作变得更容易。表示一个作用于某对象结构中的各元素的操作。他使你可以不改变各个元素类的情况下定义作用于这些元素的新操作。为什么要使用访问者模式访问者模式需要稳定的数据结构才能发挥作用,然而很少有稳定的数据结构。当然不是说不稳定的数据结构不能用访问者模式,只不过,增加一个数据结构比较麻烦。因为你需要更改所有的操作。。。。所以这个设计模式你可能一直都用不到。。。不过如果真的有需要,那么用它就原创 2020-05-08 19:28:42 · 166 阅读 · 0 评论 -
设计模式之迭代器模式--foreach循环的原理
设计模式之迭代器模式–foreach循环的原理迭代器模式是迭代,循环,一般在语言层面都实现了。提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。为什么要使用迭代器模式因为要循环啊,总有循环遍历的需求,所以就要使用迭代器模式了。不过这些语言都内置了,比如foreach这种。那么foreach是怎么实现可以遍历的呢?php实现迭代器模式迭代器主要就是一个一个循环,那么需要有下一个的方法,也就是next,有下一个就需要判断是否可以循环,那么要有一个hasNext方法。首先原创 2020-05-08 18:10:40 · 352 阅读 · 0 评论 -
设计模式之状态模式--状态机的实现原理
设计模式之状态模式–状态机的实现原理状态模式是根据状态的改变触发一些动作或者行为。当一个对象的内在状态改变时可以改变其行为,这个对象看起来像是改变了其类。为什么用使用状态模式状态模式主要有三部分状态、事件、动作。通过一些事件会触发状态的改变,状态的改变有时候也会出发一些动作。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的...原创 2020-05-08 16:48:14 · 847 阅读 · 0 评论 -
设计模式之职责链模式--请求拦截器中间件审批流的原理
设计模式之职责链模式–请求拦截器中间件审批流的原理职责链模式是定义一个链条,有不同的步骤,一步接一步完成。使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。为什么要使用职责链模式职责链模式平时不怎么用。这个模式在一些框架中比较明显。比如我们的中间件,每个中间件都有机会处理请求,并且可以中断请...原创 2020-05-08 15:42:54 · 475 阅读 · 0 评论 -
设计模式之策略模式--配合工厂模式灵活替换不同算法实现
设计模式之策略模式–配合工厂模式灵活替换不同算法实现策略模式是一种对可替换的算法或者业务逻辑进行封装,灵活替换的模式。定义了算法家族并分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户端。为什么要使用策略模式策略模式是比较常用的模式了,很多情况下都会需要根据场景来替换不同的具体实现。比如打折算法,针对不同级别的用户进行不同的打折。比如优惠券算法,针对...原创 2020-05-08 15:01:30 · 356 阅读 · 0 评论 -
设计模式之模板设计模式--设计框架骨架使得开发更专注业务
设计模式之模板设计模式–设计框架骨架使得开发更专注业务模板设计模式是一种根据面向对象的继承,多态特性出现的模式,模板父类定义了一个框架主逻辑,子类重写对应子类的部分子逻辑来补充主逻辑。定义操作中的算法骨架,将一些步骤延迟到子类。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。为什么要使用模板方法模式这个模式应该是代码中使用最多的几个之一了。基本上你使用了继承并且...原创 2020-05-07 19:51:55 · 197 阅读 · 0 评论 -
设计模式之观察者--发布订阅实现原理
设计模式之观察者–发布订阅实现原理观察者模式是一种发布订阅模式,一对多的推送关系,当观察者监听的对象发生改变时,通知所有的观察者对象。定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。为什么要使用观察者模式观察者模式解耦了观察者和被观察者。当你有一处改变需要通知多个地方的时候就可以用观察者模式...原创 2020-05-07 16:49:53 · 313 阅读 · 0 评论 -
数据结构-线性表的顺序存储和链式存储结构php实现
大话数据结构数据结构:是相互之间存在一种或多种特定关系的数据元素的集合绪论逻辑结构逻辑结构:是指数据对象中数据元素之间的相互关系。其实这也是我们今后最需要关注的问题。逻辑结构分为以下四种集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有其他关系线性结构:线性结构中的数据元素之间是一对一的关系树形结构:树形结构中的数据元素之间存在一种一对多的层次关系图形结构:图形结...原创 2020-04-15 11:19:57 · 309 阅读 · 0 评论 -
23种设计模式总结-你想知道的设计模式都在这里
简单工厂模式简单工厂模式是一种创建型设计模式,通过不同的类型来创建出不同的实例返回给客户端/** * 计算器 */class Factory{ function createJiSuanQi(string $symblo) : JiSuan { switch ($symblo) { case '+': r...原创 2020-04-14 16:45:14 · 166 阅读 · 0 评论 -
分布式必备发号器-SnowFlake算法原理详解
发号器生成唯一id的需求很多,我们经常会用到,不管是单库单表中的唯一,还是分布式的唯一。SnowFlake 算法说一下SnowFlake算法,这个算法是一个生成唯一id的算法。使用的是一个64位的二进制串,把这个串分成了几个部分。符号位 占一个位置 0 为正时间戳位 占41个位置,使用毫秒级时间戳机器位 占10个位置, 可以支持2的10次方-1个机器使用序号位 占12个位置, 同...原创 2020-04-03 09:56:18 · 506 阅读 · 0 评论 -
素数对猜想-算法
素数对猜想题目“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。输入例子20输出例子4解题思路这个比较简单,看题目,能确定一点,一个素数对,有两个相差 2 的素数组成。那么接下来就可以用 n除以2到根号n之中的任意一个数,如果能被整除,那么就不是素数,如果不能被整除,那么就是一个素数。如果发现了一...原创 2020-03-29 10:15:21 · 701 阅读 · 0 评论 -
打印沙漏-算法
打印沙漏题目顾名思义,就是要输出一个沙漏,那么什么是沙漏呢,就是下面的样子了 ***** *** * *** *****也就是要给我们n个*,这个沙漏每一行的 符号 数量都是奇数,因此是有规律的。输入例子19 //多少个符号 *输出例子 //打印出一个沙漏 ***** *** * *** ***** 2 //剩余没有...原创 2020-03-27 14:12:15 · 920 阅读 · 0 评论 -
支付宝支付接口详解
一、支付宝在线支付功能1、介绍支付宝是支付宝公司研发的一款在线支付工具。在国内以及国外都有很多人在使用这个在线支付工具。 官网:http://www.alipay.com 在线支付的原理:说明:关于支付宝在线支付功能使用,是需要通过在线支付接口(API)来实现,所以如果需要使用支付宝等第三方的在线支付功能需要向第三方在线清算机构提原创 2016-09-28 21:19:41 · 17305 阅读 · 0 评论 -
memcache安装,配置和使用
1. Memcache介绍Memcached 是国外社区 网站 LiveJournal 的开发团队开发的 高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web应用的速度、提高可扩展性。2. 安装使用 -d install参数来进行安装注意:最好关闭360卫士、金山卫士等软件。在“运行” --原创 2016-09-28 19:53:16 · 1210 阅读 · 0 评论 -
git 使用教程
git 使用教程这几天在使用git在网上找了很多教程,发现都只是简单的几行命令就没有了,结果当然是一遇到问题就懵逼了,这一发现使我痛定思痛,写下这篇文章,以免以后忘记这些。这里国际惯例,先介绍一下什么是git:想看git完整介绍的请点击这里 。Git是什么?Git是目前世界上最先进的分布式版本控制系统(没有之一)。Git有什么特点?简单来说就是:高端大气上档次!一 、首先创建一个git仓库git i原创 2016-10-16 22:14:31 · 561 阅读 · 0 评论 -
浅谈php脚本
很多时候,很多事情都会 用到脚本,而我们很多时候所说的脚本大多是shell脚本,那么php可以写脚本吗,当然没问题,和大多数脚本一样,开头要标明是什么来解析你的脚本,我们在开头加上这样一句话,如果不知道或者忘记了php的位置,那么没关系,只要你安装了php,就可以运行命令whereis php来查看#!/usr/bin/php //此处的路径为你php的位置然后就是开始写你的php文件了,加上循环原创 2016-11-16 12:51:32 · 429 阅读 · 0 评论 -
laravel 自定义分页 offset 和 limit 的使用
laravel 本身有一个自带的快速分页方法 paginate,只需要传入每页显示多少条数据就可以 了,但是如果想使用自定义从哪里开始呢,这时候就可以使用offset 和 limit 的组合,offset 设置从哪里开始,limit 设置想要查询多少条数据。Model::offset(0)->limit(10)->get()上面的代码表示查询出前十条数据。原创 2016-11-14 17:04:44 · 28963 阅读 · 3 评论 -
laravel ORM CURD 操作,连贯操作
一、查询获取数据库所有数据Model::all()获取指定条件数据Modle::where('status','1')->get()获取第一条数据Model::where('status','1')->first()多条件查询,相当于sql 的 or Model::where('status','1')orWhere('sex','1')->first()查询两者之间 whereBetween,传入原创 2016-11-14 18:21:04 · 4264 阅读 · 0 评论 -
基于laravel 的博客平台 -- Vuedo
这是一个开源博客,话不多说,直接放github:https://github.com/Vuedo/vuedo1.基本功能管理岗位和媒体职位分类用户角色内容审阅编辑降价Amazon S3的集成2.安装下载好代码之后运行如下命令安装composer installnpm installphp artisan key:generatephp artisan migratephp ar原创 2016-11-15 15:21:56 · 561 阅读 · 0 评论 -
thinkphp3.2 整合阿里大鱼短信发送接口
在这里说一下这个常用的短信验证码如何使用thinkphp实现吧,登录阿里大鱼,注册登录,然后增加短信模板,签名,这些完成之后,下载sdk,把sdk。sdk里面对于我们来说有用的文件只有下面这些原创 2016-11-21 17:49:30 · 3982 阅读 · 0 评论