匹配话题词实现

需求分析

现在社交平台存在大量话题,例如微博
假设话题词的结构如下

#word1#,#word2#,#word3#

实现对话题词的过滤
结构不符合 返回错误

相同字段嵌套的多维数组遍历递归实现

JSON示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// json中的嵌套层数大概在1-8层之间
$graph = {
'name': 'a',
'value': '123'
'children': {
'0': {
'name': 'a',
'value': '123',
'children': {
'0': {
'name': 'a',
'value': '123',
},
...
}
},
...
}
},
...

需求分析

信息引爆点分析 截取JSON中以value排序的top20
[其中子数组的截取无需排序]
通过name批量请求接口转换对应的内容 填充原数据源[JSON]

面向对象SOLID准则

SOLID

单一功能

开闭原则

里氏替换

接口隔离

依赖反转

UTF-8下实现正则匹配

需求

满足以汉字大小写字母数字下划线逗号组成
长度小于1k的合法String

即word1,word2,word3,word4
word中只包含汉字大小写字母数字下划线
且由用英文逗号分隔
且最后不需要添加英文逗号

求多维数组的并集

最近 有个小需求 一眼看上去挺简单
细想还是有点门道 可能是我太渣渣了😂

问题

将如下的$arr进行处理 替换$arr_template对应的键值对「原来的value为空」
两个数组之间无序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
// 需求并集处理的数组
$arr = [
[
'name'=>'xasxa',
'value'=>'3131'
],
[
'name'=>'xxcc',
'value'=>'1234'
]
];
// 并集处理的模版
$arr_template = [
[
'name'=>'xxcc',
'value'=>'0'
],
[
'name'=>'qedcc',
'value'=>'0'
],
[
'name'=>'csaq',
'value'=>'0'
],
[
'name'=>'xasxa',
'value'=>'0'
],
[
'name'=>'hjsa',
'value'=>'0'
]
];

CodeIgniter小记

框架都差不多 掌握MVC思想即可
作为Laravel的忠实拥护者 以及写过PHPCMS的技术渣渣
因为业务的需要 使用CI开发 半天时间过了下技术文档
最大感受是 和Laravel相比较 更容易入门易懂
缺点呢 就是代码没有那么优雅

原文只记录了几点文档里的东西 怕自己忘记😁

析构函数和register_shutdown_function执行先后问题

析构函数/__destruct()

__destruct ( void ) : void

简介

当对象结束其生命周期时
e.g: 对象所在的函数已调用完毕
系统自动执行析构函数

register_shutdown_function

register_shutdown_function ( callable $callback [, mixed $... ] ) : void

简介

在脚本执行完成或调用 exit() 之后注册要执行的回调

可以多次调用 register_shutdown_function()
并且每次调用的顺序都与注册时的顺序相同 如果在一个已注册的关闭函数中调用 exit() 则处理完全关闭
并且不会调用其他注册的关闭函数

PHP生命周期

PHP生命周期主要分为五大阶段

  • 模块初始化
  • 请求初始化
  • 执行
  • 请求关闭
  • 模块关闭

具体流程详情如下

PHP对象的深、浅拷贝

深浅拷贝定义

深拷贝

赋值时值完全复制 完全的copy 对其中一个作出改变 不会影响另一个
即 值传递

浅拷贝

赋值时 引用赋值 相当于取了一个别名 对其中一个修改 会影响另一个
即 引用传递

暴露PHP版本号带来的风险?

最近 被问到一个问题
暴露PHP版本号带来的风险
我是一脸懵的 因为之前没特别留意过这些安全方面的问题

于是乎
我搜索google了许久 发现大部分都是在讲解如何修复
最后 发现原因

PHP | Golang 生成区间随机数的方法

如题
假设 i, j 为整型且满足关系 i < j

PHP

1
2
3
// 内置函数
<?php
echo mt_rand(i, j);

Golang

1
2
3
4
5
6
7
8
9
10
11
12
13
func randNum(i, j int) int {
// 一定要给一个时间戳的种子 否则每次生成都是一样的值
r := rand.New(rand.NewSource(time.Now().UnixNano()))
return r.Intn(j - i) + i
/**
* 也可以使用
* rand.Seed(time.Now().Unix())
* return rand.Intn(j - i) + i
* 需要注意的是
* Seed使用提供的種子值將生成器初始化為確定性狀態
* 種子不應與任何其他rand方法同時調用
*/
}
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×