2345首页 » 微信公众号精选 » PHP语言中我最喜欢的10个函数

账号:shaobowan
签名:专注互联网技术干货分享
发布时间:2024-01-29 07:30:36

1. Levenshtein

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%

2. easter_date

easter_date()函数是PHP中的一个内置函数,它返回作为参数传递的年份中的复活节日期。当没有参数作为参数传递时,当前年份被视为默认年份。

echo date('Y-m-d', easter_date(2023)); // 2023-04-08

3. forks

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);
}

4. metaphone

metaphone()函数是PHP中的内置函数,用于计算给定字符串的变音键。Metaphone键是一种语音算法,用于通过单词的发音来索引单词。它使用更大的英语发音规则。

metaphone("Light color schemes!"); // LFTKLRSXMS
metaphone("Light colour schemes!"); // LFTKLRSXMS

5. dns_get_record

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) ""
    }
  }
}

6. array_merge_recursive

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
)

7. mail

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);

8. dl

PHP函数dl是用于在PHP文件运行时,载入一个 PHP 扩展文件。

if (!extension_loaded('sqlite')) {
    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
        dl('php_sqlite.dll');
    } else {
        dl('sqlite.so');
    }
}

9. glob

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
)

10. date_sun_info

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


其他文章: