2345首页 » 微信公众号精选 » PHP语言中我最喜欢的10个函数
Levenshtein算法是一种用于比较两个字符串的算法,可以计算两个字符串之间的编辑距离。编辑距离是指将一个字符串转换成另一个字符串所需的最小操作数,操作包括插入、删除和替换等。
这是一个非常酷的功能,可以确定两个相关的单词或短语有多相似。例如:传入 PHP is awesome
两次,将导致 0
的距离
:
levenshtein("PHP is awesome", "PHP is awesome"); // 0
但是,传入两个不同的短语将导致更大的距离
levenshtein("Dark colour schemes", "are awesome"); // 13
除了计算编辑距离,Levenshtein算法还可以用于字符串相似度比较。相似度计算可以根据Levenshtein距离来定义,常见的方法包括将Levenshtein距离转换为相似度百分比或者相似度得分等。PHP中的levenshtein()函数也支持与字符串相似度相关的计算,代码如下:
$s1 = 'Tinywan';
$s2 = 'ShaoBoWan';
$max_length = max(strlen($s1), strlen($s2));
$distance = levenshtein($s1, $s2);
$similarity_percent = (1 - $distance / $max_length) * 100;
echo $similarity_percent . '%';
在这段代码中,我们首先通过max()函数计算出两个字符串中较长的那个长度,然后计算编辑距离并将其转换为相似度百分比。运行这段代码,会输出22%
,表示两个字符串相似度为70%
。
easter_date()
函数是PHP中的一个内置函数,它返回作为参数传递的年份中的复活节日期。当没有参数作为参数传递时,当前年份被视为默认年份。
echo date('Y-m-d', easter_date(2023)); // 2023-04-08
CLI版本的PHP可以访问 pcntl
函数,包括 pcntl_fork
函数。这个函数基本上是一个用于创建进程``fork的包装器,允许一个PHP进程生成和管理多个进程!
下面是一个在PHP中使用套接字创建一个PHP子进程的简单示例:
function async(Process $process): Process {
socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $sockets);
[$parentSocket, $childSocket] = $sockets;
if (($pid = pcntl_fork()) == 0) {
socket_close($childSocket);
socket_write($parentSocket, serialize($process->execute()));
socket_close($parentSocket);
exit;
}
socket_close($parentSocket);
return $process
->setStartTime(time())
->setPid($pid)
->setSocket($childSocket);
}
metaphone()
函数是PHP中的内置函数,用于计算给定字符串的变音键。Metaphone键是一种语音算法,用于通过单词的发音来索引单词。它使用更大的英语发音规则。
metaphone("Light color schemes!"); // LFTKLRSXMS
metaphone("Light colour schemes!"); // LFTKLRSXMS
dns_get_record()
函数用于获取域名的DNS记录。它可以返回该域名的所有A记录、MX记录、NS记录、SOA记录、TXT记录等。
dns_get_record("ai.tinywan.com")
输出
array(1) {
[0]=>
array(6) {
["host"]=>
string(14) "ai.tinywan.com"
["class"]=>
string(2) "IN"
["ttl"]=>
int(3600)
["type"]=>
string(3) "TXT"
["txt"]=>
string(7) "RFC8482"
["entries"]=>
array(2) {
[0]=>
string(7) "RFC8482"
[1]=>
string(0) ""
}
}
}
array_merge_recursive()
函数是PHP的内置函数之一,它用于合并一个或多个数组。此函数将合并所有数组的元素,包括嵌套的数组。在两个或更多数组之间相互合并时,这函数的行为略有不同。
$array1 = ['a' => ['b', 'c']];
$array2 = ['a' => ['d', 'e']];
$result = array_merge_recursive($array1, $array2);
print_r($result);
输出
Array
(
[a] => Array
(
[0] => b
[1] => c
[2] => d
[3] => e
)
)
可以看到,当我们合并数组$array1
和$array2
时,'a'
下的数组'b'
, 'c'
合并到了结果中,而'a'
下的数组'd'
, 'e'
也被合并到到结果中。
使用array_merge_recursive()函数时,如果要合并的数组具有相同的字符串键名,则这些数组的元素将合并成一个数组。
$array1 = ['a' => 'apple','b' => 'banana'];
$array2 = ['a' => 'pear', 'c' => 'cherry'];
$result = array_merge_recursive($array1, $array2);
print_r($result);
输出
Array
(
[a] => Array
(
[0] => apple
[1] => pear
)
[b] => banana
[c] => cherry
)
mail() 函数允许您从脚本中直接发送电子邮件。如果电子邮件的投递被成功地接受,则返回 TRUE,否则返回 FALSE。
$txt = "First line of textnSecond line of text";
// Use wordwrap() if lines are longer than 70 characters
$txt = wordwrap($txt,70);
// Send email
mail("tinywan@aliyun.com","开源技术小栈",$txt);
PHP函数dl是用于在PHP文件运行时,载入一个 PHP 扩展文件。
if (!extension_loaded('sqlite')) {
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
dl('php_sqlite.dll');
} else {
dl('sqlite.so');
}
}
glob()
函数返回一个包含匹配指定模式的文件名或目录的数组。该函数返回一个包含有匹配文件/目录的数组。如果失败则返回 FALSE。
print_r(glob(__DIR__."/*.md"));
输出
Array
(
[0] => D:\work\docs\dev\other/account.md
[1] => D:\work\docs\dev\other/changelog.md
[2] => D:\work\docs\dev\other/meet.md
[3] => D:\work\docs\dev\other/question.md
[4] => D:\work\docs\dev\other/wechat.md
)
date_sun_info()
函数返回一个包含有关指定日期与地点的日出/日落和黄昏开始/黄昏结束的信息的数组。
$sun_info=date_sun_info(strtotime("2024-01-01"),31.7667,35.2333);
foreach ($sun_info as $key=>$val)
{
echo "$key: " . date("H:i:s",$val) . PHP_EOL;
}
输出
sunrise: 04:38:51
sunset: 14:45:50
transit: 09:42:21
civil_twilight_begin: 04:12:07
civil_twilight_end: 15:12:34
nautical_twilight_begin: 03:41:45
nautical_twilight_end: 15:42:56
astronomical_twilight_begin: 03:12:03
astronomical_twilight_end: 16:12:38