PHP微信公众开发笔记(七)
PHP微信公众开发笔记系列日期:2014.9.6
这篇日记是补昨天的,昨天没来得及写;
主要实现的功能:模糊检索、问答系统、帮助系统
修复了:_SESSION 的id
调整了验证机制
要注意的:mysql的语法问题、mysql的模糊匹配、PHP的关联数组好像用count计算的话其大小会有原有数据的两倍大(即数组中只有两个数据,count会得到4,这个需要再验证,好像是用到了foreach就出现了这个问题)
学到了:PHP中数组的操作
2014.9.10整理笔记:
写这个笔记的时候,在赶功能,所以也就是简单的记几笔当时的工作内容,现在功能开发得差不多了,就来整理之前的笔记。当时就很简单的记录了上文的那几句。
我记得,那天来上班的路上,同学跟我说,希望的功能是:输入某个城市的名字,便能够得到在这个城市的同学的信息。其实这个功能便是我最初想弄这个微信公众号想要实现的功能了,这样便能很方便的进行信息检索了,虽然说现阶段我们或许没有很多人到处走动,没有那个需求。但排除不了偶然,所以就有了这个想法。
模糊检索:
模糊检索的话,说来说去也是基于数据库检索的,这里应该弄一个关键词,以便服务台程序可以捕获这个关键词,我设定为查看+XX来查看信息,比如说想查看广州的信息,则回复“查看广州”即可。
具体实现:
首先是关键词捕获了,这个跟笔记六里面提到的类似,无非是用两个字符串处理函数了:strstr,str_replace处理用户输入的信息;关键是如何处理从数据库中检索信息了,刚开始我的想法是是否能在数据库中做模糊检索,实在不行的话就首先得到所有的信息,然后去对比;
方案一、关于数据库的模糊匹配:
从网上查阅到的资料显示是支持模糊检索的,但是我试了好几个小时,就是没有效果,不知道是不是我对这个模糊检索的理解有错误,网上查看到的语法是:
1、select from xxx(数据表名) where xxx(字段) like xxx(我们要检索的) ,网友给的介绍是,这个语法能从给定的数据表中,检索相应的字段值为我们要查找的信息。但我们这里要做的是多字段查看,即数据表中有省份、城市等字段信息,我需要做这些字段的模糊匹配,所以又开始查阅资料了;
2、select from xxx where concat('field_a','field_b','field_c') like xxx ,这里concat相当于是组合多个字段,然后去做模糊匹配,我照着这个来了,但是还是没有成功;
3、select from xxx where xxx.colum_name like xxx ,这也是查阅到的资料,改变之处在于字段名改为了:数据表.colum_name 这样去匹配的,但是还是没有用;
具体的没有用根据我打印出来的信息是,用mysql_query 检索到了信息,但是这个结果用mysql_fetch_assoc或者mysql_fetch_array处理之后,并没有得到相应的数组,不知道是什么情况;在这里也要注意的是:like后面的那个模糊匹配信息,根据网友提供的意见是,如果是中文字符需要写成%检索%这样的格式,即两边都要有百分号。
在这里虽然说没有达到我的需求,但是还是感受到,要能很好的操作数据库,那么就需要好好的看看mysql操作手册了。
方案二、得到信息再去匹配对比
这个方案应该是说很简单易行的,因为我做的手游项目中就是这么处理的,其实我一开始有模糊检索这个需求的时候,也是想到这个方法的。但是我考虑到,首先从数据库中得到信息需要访问数据库检索,然后再去做对比又要花时间,这个可能会影响性能的,因此我才想到要在网上查询是否有解决方案的。但是事与愿违,没有达到预期所需,这个就留给以后看吧。
这个方案很简单,只需首先将所有的信息都得到,然后去做对比就可以了。这里用到了php数组的一个操作函数使之对比变得非常的简单:in_array();判断某个值是否在数组中。因为我们从数据库中得到的信息,php是处理成一个个数组的,我检索广州这个词,就只需要判断在这些数组中是否出现了广州这个词就可以了,所以比较简单。具体实现我是这样做的:
vcv509C1xNDFz6KjrMi7uvPRrbu31eK49rb+zqzK/dfpo6zDv7TO0a27t7XDtb3Su7j2yv3X6dDFz6KjrMi7uvPIpbj6ztLDx9KqvOzL97XEJiMyMDU0MDvIpbbUscijrMalxeS1vcHLvs29q9XiuPbK/dfpt8W1vc7Sw8e1xL3hufvK/dfp1tDIpaOsyLu689TauvPD5rXEstnX99bQ1/a94bn7tKbA7b7Nv8nS1MHLoaM8YnI+CtLytMu52NPaxKO6/bzsy/fV4rj2uabE3LXjvs3V4tH5yrXP1sHLoaM8YnI+Cjxicj4KPHN0cm9uZz7OyrTwz7XNs6O6PC9zdHJvbmc+PGJyPgrU2rm5y7zEo7r9vOzL97XEyrG68qOsztLSss/ro6zKx7fxxNzFqrj2uabE3MC0sO/W+s2s0ae72NLku9jS5LTz0ae1xLarzveho9PQwcvV4rj2z+u3qNauuvOjrM7SubnLvMHL0ru49r3Q1/bOyrTwtcS5psTco6y8tNPDu6e72Li0zsq08KOsz7XNs77Nt7W72NK7uPbOysziyMPTw7unyKW72LTwoaPV4tCpzsrM4ra8yse52NPatPPRp8n6u+61xKOsyOfRp7rF1q7A4LXEoaM8YnI+CtPQwcvV4rj2z+u3qNauuvOjrLHjv6rKvNfFytbKtc/WwcujrNLyzqrO0s/rtb278tDt0tS689XiuPa5psTcu+HT0MCp1bmjrMv50tTO0tLU0ru49sDgwLTKtc/Wo6zO0rPG1q7Oqs7S1eK49s+1zbO1xNK7uPbEo7/po6yx49PazbPSu7ncwO2hozxicj4Kvt/M5bXEyrXP1rrcvPK1paOsvs3Kx9Ta08O7p7vYuLShsM7KtPChsbXEyrG68qOs08MkX1NFU1NJT068x8K80rvPwtPDu6e/qsb0wcvOyrTwxKO/6aOsyLu689PDu6e1xM/C0ruyvbvYuLTQxc+ivs3Kx7vYtPDE2sjdwcujrLvYtPCyu7ncs8m5psqnsNy2vMfls/219CRfU0VTU0lPTrnY09rTw7unv6rG9M7KtPDEo7/ptcTQxc+ioaO40L711eLR+cq1z9a1w9PQteO88rWltNaxqaOsuf65/qGjPGJyPgq+38zlyrXP1rrcvPK1paOsvLi69cO709DF9rW9uty087XEzsrM4qOsy/nS1LK7zOG+38zlyrXP1sHLoaM8YnI+Cjxicj4KPHN0cm9uZz6w79b6z7XNs6O6PC9zdHJvbmc+PGJyPgo8cD6w79b6z7XNs87StcS5uc/rysejrMzhuanN5tXiuPa5q9bausW1xL3Ms8yjrLywvPK1pbXEuPzQwsjV1r65psTcoaPP67W90qrFqtXiw7S24KOsxMfDtNTZu9i4tM7Esb7Qxc+iv8+2qL7NsrvMq7rDwcujrMv50tS+zdDo0qq72Li0zbzOxMG0vdPBy6GjzbzOxMG0vdO1xLvYuLTU2rnZt721xL+qt6LOxLW11tC+zdPQvt/M5bXEy7XD98HLo6zO0r+0tb3N+NPRtcS3vbeoo6y9q8TH0ru087SueG1stK631r3iv6rAtLSmwO2jrM7S0rK4+tfF1eLDtNf2wcujujwvcD4KPHA+PGltZyBzcmM9"http://www.2cto.com/uploadfile/Collfiles/20140912/2014091209043527.png" alt="\">
传过来一个数组,然后再做处理,就可以很方便的回复图文链接了。
这里再提一下关于点击后跳转的那个链接吧:
因为我压根就不懂该怎么弄那个链接(一点概念都没有),后来想应该就是一个文件,这个链接就是这个文件的存放地址。然后我就随便用php写了个文件,放到SAE的Storage里,把这个链接放过来,测试了下效果就是这样的。
经常浏览网页的时候,又看到网页多是html的,所以又想该怎么生成html文件,在网上查资料html文件该怎么生成,又是网页在线生成、又是word保存为html、后来回家又是用dreamweaver的。后来html文件是生成了,可是没有很好的匹配手机浏览的需求,应该说是压根不像一个网页,可能我稍微有点网页设计基础应该就可以了,网上有很多的模板素材。
后来我无意在公众平台的素材库看到了我同学们做的一些文档,心想,能不能直接把我要用的那个帮助文档也用这个素材库来处理,直接创建一个新的素材,里面的内容就是帮助文档的信息。说来就来,将直接写好的帮助文档,添加至我新创建的素材中去,然后保存好再测试效果。结果很满意,就是我要的效果,这才像手机打开的网页嘛。因为有点强迫症,总是要调整格式啥的,所以那天忙到快十二点了才整理好,那天是周五,回到租的房子差不多是晚上八点了,回来后稍微收拾了下就是在整理公众平台了,然后忙到十二点左右。虽然累,但是很开心。
PHP注意点:
1、这天开发的时候遇到了问题,$_SESSION出问题了:保存的信息,每个用户都是可以访问的。当时在网上查资料的时候,要使得每个用户得到的信息不一致,需要通过设置ID来实现,即使用一个唯一的用户信息来设置id,这样就能保证每个用户得到的信息是不一致的:
session_id() 使用这个函数来设置id
因为微信公众号得到的收到的信息,里面有一个表示的是发送信息的用户,可以通过以这个为id使得值唯一,所以我就是以用户的信息来设置id的,但是后来出问题了。我一开始以为是这个机制的问题,以为我使用不当。所以调整了函数的调用顺序:
本来是
session_id();
session_start();
这样的调用顺序的,我想是不是这个顺序不对,我就换了下,结果还是不对。后来,我认真的看了下设置的这个id,才发现是我把那个用户信息写错了,大小写没分清楚,真是马虎害死人。
从微信服务器得到的用户信息是这样的:
$postObj->FromUserName
而我用成这样了 $postObj->fromUserName
而我却一直都没发现。。。诶。。。
2、php的数组:
使用关联数组的时候,如果使用foreach做循环,循环次数会有其count大小的两倍。这个在我做模糊检索的时候碰到了这个问题。当时我不是用in_array做匹配,而是使用循环数组来做匹配的,在网上查到的资料是说关联数组使用foreach来做匹配,这样还可以得到键值:
foreach ($array as $key => $value) { if($array[$key] == xxx) $res_array[] = $array[$key]; }当时我这样做的时候,这个循环的次数为数组大小的两倍,我打印了这个key,显示出:既把关联的key打印出来了,又把数值键打印出来了。即第一次打印出的是数值key,第二次打印对应的关联key,同一个元素会被打印出两次。所以在我做匹配的时候,会得到两个同样的数组。不知道是不是我在哪里的使用出了问题。

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

Fibers在PHP8.1中引入,提升了並發處理能力。 1)Fibers是一種輕量級的並發模型,類似於協程。 2)它們允許開發者手動控制任務的執行流,適合處理I/O密集型任務。 3)使用Fibers可以編寫更高效、響應性更強的代碼。

PHP社區提供了豐富的資源和支持,幫助開發者成長。 1)資源包括官方文檔、教程、博客和開源項目如Laravel和Symfony。 2)支持可以通過StackOverflow、Reddit和Slack頻道獲得。 3)開發動態可以通過關注RFC了解。 4)融入社區可以通過積極參與、貢獻代碼和學習分享來實現。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版