内置 PHP 算法

现在,我们将检查 PHP 的一些内置功能,它们可以解决我们日常操作所需的大量算法实现问题。我们可以将这些功能分为数学、字符串、密码学和散列、排序、搜索等。现在我们将探讨基础转换算法:

  • base_convert: 该函数用于数字的基数转换。基数范围限制为 2 至 36。由于基数可以是任意基数且包含字符,因此函数的第一个参数是字符串。下面是函数的示例:

    $baseNumber = "123456754";
    $newNumber = base_convert($baseNumber, 8, 16);
    echo $newNumber;

    输出结果如下:

    14e5dec
  • bin2hex:将二进制字符串转换为十六进制字符串。它只需要二进制字符串作为参数。

  • bindec:将二进制字符串转换为十进制数。它只需要二进制字符串作为参数。

  • decbin:将十进制数转换为二进制字符串。它仅采用十进制值作为参数。

  • dechex:将十进制数转换为十六进制字符串。它只需要一个十进制值作为参数。

  • decoct:将十进制数转换为八进制字符串。它只需要一个十进制值作为参数。

  • hex2bin:将十六进制字符串转换为二进制字符串。它仅采用十六进制字符串作为参数。

  • hexdec:将十六进制字符串转换为十进制数字。它仅采用十六进制字符串作为参数。

  • octdec:将八进制字符串转换为十进制数。它只需要一个八进制字符串作为参数。

还有许多其他内置功能可用于不同目的。其中最重要的一项工作是在发送电子邮件或传输层时对文本字符串进行编码和解码。由于我们需要编码并可以选择解码,所以我们不使用单向加密函数。此外,还有许多有用的函数可用于不同的字符串操作。现在我们就来探讨一下这些函数:

  • base64_encode:该函数使用 base 64 MIME 类型对数据进行编码。通常,编码后的字符串比实际字符串要大,所占空间比实际字符串多 33%。有时,生成的字符串末尾会有一个或两个等号,这表示字符串的输出填充。

  • base64_decode:该函数接收 base 64 编码字符串,并从中生成实际字符串。它与我们前面讨论的函数正好相反

  • levenshtein:我们面临的最常见问题之一是查找两个文本之间的相似性,例如,用户输入的产品名称,而我们的列表中没有该名称。然而,快速检查后发现,文本中出现了一个错字。为了显示哪个是最接近的匹配字符串或正确字符串,我们需要根据最小字符数来添加、编辑或删除它们。我们称之为编辑距离。levenshtein 函数或列文士坦距离的定义是,要将第一个字符串转换为第二个字符串,我们必须替换、插入或删除的最少字符数。该函数的复杂度为 \$O(m*n)\$,限制条件是每个字符串必须小于 255 个字符。下面是一个示例:

    Unresolved include directive in modules/ROOT/pages/ch12/ch12-03.adoc - include::example$Chapter12/1.php[]

    输出结果如下:

    Did you mean: Mango?

    该函数的另一个变体需要额外的三个参数,我们可以通过这三个参数提供插入、替换和删除操作的成本。这样,我们就能根据成本函数得到可能的最佳结果。

  • similar_text:该函数计算两个字符串之间的相似度。它可以选择以百分位数方式返回相似度。该函数区分大小写,并根据匹配字符返回相似度得分。下面是一个示例:

    Unresolved include directive in modules/ROOT/pages/ch12/ch12-03.adoc - include::example$Chapter12/1.php[]

    前面的代码将生成 Mango 和 Tango 之间的百分位数匹配。输出结果如下:

    Match length: 4
    Percentile match: 80%
  • soundex:这是一个有趣的函数,使用它我们可以找到给定字符串的 soundex key。这个 soundex key 可用于从词库中查找发音相似的单词,或查找两个单词的发音是否相似。Soundex key 长度为四个字符,其中第一个字符为字母,其余三个字符为数字。下面是一些熟悉单词的音素键:

    Unresolved include directive in modules/ROOT/pages/ch12/ch12-03.adoc - include::example$Chapter12/1.php[]

    前面的代码会有如下输出:

    Pray = P600
    Prey = P600
    There = T600
    Their = T600

    从前面的输出中我们可以看到,prayprey 是不同的词,但它们有相似的 Soundex 键。在不同的使用情况下,Soundex 对于从数据库中找出发音相似的单词非常有用。

  • metaphone:Metaphone 是另一种类似于 soundex 的功能,可以帮助我们找到发音相似的单词。两者的基本区别在于,metaphone 更准确,因为它考虑了基本的英语发音规则。该函数可生成长度可变的 metaphone 键。我们还可以通过第二个参数来限制密钥生成的长度。下面是一个来自 soundex 的类似示例:

    Unresolved include directive in modules/ROOT/pages/ch12/ch12-03.adoc - include::example$Chapter12/1.php[]

    以下是以下代码的输出结果:

    Pray = PR
    Prey = PR
    There = 0R
    Their = 0R