资讯专栏INFORMATION COLUMN

30秒的PHP代码片段(3)字符串-String & 函数-Function

BlackMass / 500人阅读

摘要:返回给定字符串中的元音数。使用正则表达式来计算字符串中元音的数量。对字符串的第一个字母进行无头化,然后将其与字符串的其他部分相加。使用查找字符串中第一个出现的子字符串的位置。相关文章秒的代码片段数组秒的代码片段数学

本文来自GitHub开源项目

点我跳转

30秒的PHP代码片段

精选的有用PHP片段集合,您可以在30秒或更短的时间内理解这些片段。
字符串 endsWith

判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回true,否则返回false

function endsWith($haystack, $needle)
{
    return strrpos($haystack, $needle) === (strlen($haystack) - strlen($needle));
}

Examples

endsWith("Hi, this is me", "me"); // true
firstStringBetween

返回参数startend中字符串之间的第一个字符串。

function firstStringBetween($haystack, $start, $end)
{
    return trim(strstr(strstr($haystack, $start), $end, true), $start . $end);
}

Examples

firstStringBetween("This is a [custom] string", "[", "]"); // custom
isAnagram

检查一个字符串是否是另一个字符串的变位元(不区分大小写,忽略空格、标点符号和特殊字符)。

就是所谓的字谜
function isAnagram($string1, $string2)
{
    return count_chars($string1, 1) === count_chars($string2, 1);
}

Examples

isAnagram("fuck", "fcuk"); // true
isAnagram("fuckme", "fuckyou"); // false
isLowerCase

如果给定字符串是小写的,则返回true,否则返回false

function isLowerCase($string)
{
    return $string === strtolower($string);
}

Examples

isLowerCase("Morning shows the day!"); // false
isLowerCase("hello"); // true
isUpperCase

如果给定字符串为大写,则返回true,否则返回false

function isUpperCase($string)
{
    return $string === strtoupper($string);
}

Examples

isUpperCase("MORNING SHOWS THE DAY!"); // true
isUpperCase("qUick Fox"); // false
palindrome

如果给定字符串是回文,则返回true,否则返回false

回文,顾名思义,即从前往后读和从后往前读是相等的
function palindrome($string)
{
    return strrev($string) === (string) $string;
}

Examples

palindrome("racecar"); // true
palindrome(2221222); // true
startsWith

检查字符串是否是以指定子字符串开头,如果是则返回true,否则返回false

function startsWith($haystack, $needle)
{
    return strpos($haystack, $needle) === 0;
}

Examples

startsWith("Hi, this is me", "Hi"); // true
countVowels

返回给定字符串中的元音数。使用正则表达式来计算字符串中元音(A, E, I, O, U)的数量。

function countVowels($string)
{
    preg_match_all("/[aeiou]/i", $string, $matches);

    return count($matches[0]);
}

Examples

countVowels("sampleInput"); // 4
decapitalize

使字符串的第一个字母去大写。对字符串的第一个字母进行无头化,然后将其与字符串的其他部分相加。省略upperRest参数以保持字符串的其余部分完整,或将其设置为true以转换为大写。

function decapitalize($string, $upperRest = false)
{
    return lcfirst($upperRest ? strtoupper($string) : $string);
}

Examples

decapitalize("FooBar"); // "fooBar"
isContains

检查给定字符串输入中是否存在单词或者子字符串。使用strpos查找字符串中第一个出现的子字符串的位置。返回truefalse

function isContains($string, $needle)
{
    return strpos($string, $needle);
}

Examples

isContains("This is an example string", "example"); // true
isContains("This is an example string", "hello"); // false
函数 compose

返回一个将多个函数组合成单个可调用函数的新函数。

function compose(...$functions)
{
    return array_reduce(
        $functions,
        function ($carry, $function) {
            return function ($x) use ($carry, $function) {
                return $function($carry($x));
            };
        },
        function ($x) {
            return $x;
        }
    );
}
...为可变数量的参数,http://php.net/manual/zh/func...

Examples

$compose = compose(
    // add 2
    function ($x) {
        return $x + 2;
    },
    // multiply 4
    function ($x) {
        return $x * 4;
    }
);
$compose(3); // 20
memoize

创建一个会缓存func结果的函数,可以看做是全局函数。

function memoize($func)
{
    return function () use ($func) {
        static $cache = [];

        $args = func_get_args();
        $key = serialize($args);
        $cached = true;

        if (!isset($cache[$key])) {
            $cache[$key] = $func(...$args);
            $cached = false;
        }

        return ["result" => $cache[$key], "cached" => $cached];
    };
}

Examples

$memoizedAdd = memoize(
    function ($num) {
        return $num + 10;
    }
);

var_dump($memoizedAdd(5)); // ["result" => 15, "cached" => false]
var_dump($memoizedAdd(6)); // ["result" => 16, "cached" => false]
var_dump($memoizedAdd(5)); // ["result" => 15, "cached" => true]
curry(柯里化)

把函数与传递给他的参数相结合,产生一个新的函数。

function curry($function)
{
    $accumulator = function ($arguments) use ($function, &$accumulator) {
        return function (...$args) use ($function, $arguments, $accumulator) {
            $arguments = array_merge($arguments, $args);
            $reflection = new ReflectionFunction($function);
            $totalArguments = $reflection->getNumberOfRequiredParameters();

            if ($totalArguments <= count($arguments)) {
                return $function(...$arguments);
            }

            return $accumulator($arguments);
        };
    };

    return $accumulator([]);
}

Examples

$curriedAdd = curry(
    function ($a, $b) {
        return $a + $b;
    }
);

$add10 = $curriedAdd(10);
var_dump($add10(15)); // 25
once

只能调用一个函数一次。

function once($function)
{
    return function (...$args) use ($function) {
        static $called = false;
        if ($called) {
            return;
        }
        $called = true;
        return $function(...$args);
    };
}

Examples

$add = function ($a, $b) {
    return $a + $b;
};

$once = once($add);

var_dump($once(10, 5)); // 15
var_dump($once(20, 10)); // null
variadicFunction(变长参数函数)

变长参数函数允许使用者捕获一个函数的可变数量的参数。函数接受任意数量的变量来执行代码。它使用for循环遍历参数。

function variadicFunction($operands)
{
    $sum = 0;
    foreach($operands as $singleOperand) {
        $sum += $singleOperand;
    }
    return $sum;
}

Examples

variadicFunction([1, 2]); // 3
variadicFunction([1, 2, 3, 4]); // 10

相关文章:
30秒的PHP代码片段(1)数组 - Array
30秒的PHP代码片段(2)数学 - Math

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30137.html

相关文章

  • 30秒的PHP代码片段(2)数学 - Math

    摘要:本文来自开源项目点我跳转秒的代码片段精选的有用片段集合,您可以在秒或更短的时间内理解这些片段。检查提供的整数是否是素数。约等于检查两个数字是否近似相等。否则,返回该范围内最近的数字。相关文章秒的代码片段数组秒的代码片段字符串函数 本文来自GitHub开源项目 点我跳转 30秒的PHP代码片段 showImg(https://segmentfault.com/img/bVbnR1I?w=...

    mcterry 评论0 收藏0
  • 30秒的PHP代码片段(1)数组 - Array

    摘要:排列如果所提供的函数返回的数量等于数组中成员数量的总和,则函数返回,否则返回。平铺数组将数组降为一维数组根据给定的函数对数组的元素进行分组。使用给定的回调筛选数组。相关文章秒的代码片段数学秒的代码片段字符串函数 本文来自GitHub开源项目 点我跳转 30秒的PHP代码片段 showImg(https://segmentfault.com/img/bVbnR1I?w=2800&h=12...

    dunizb 评论0 收藏0
  • setTimeout 或者 setInterval,关于 Javascript 计时器:你需要知道的

    摘要:所以,我们可以将理解为计时结束是执行任务的必要条件,但是不是任务是否执行的决定性因素。的意思是,必须超过毫秒后,才允许执行。 先来回答一下下面这个问题:对于 setTimeout(function() { console.log(timeout) }, 1000) 这一行代码,你从哪里可以找到 setTimeout 的源代码(同样的问题还会是你从哪里可以看到 setInterval 的...

    Warren 评论0 收藏0
  • 【资源集合】 ES6 元编程(Proxy &amp; Reflect &amp; Symbol)

    摘要:理解元编程和是属于元编程范畴的,能介入的对象底层操作进行的过程中,并加以影响。元编程中的元的概念可以理解为程序本身。中,便是两个可以用来进行元编程的特性。在之后,标准引入了,从而提供比较完善的元编程能力。 导读 几年前 ES6 刚出来的时候接触过 元编程(Metaprogramming)的概念,不过当时还没有深究。今天在应用和学习中不断接触到这概念,比如 mobx 5 中就用到了 Pr...

    aikin 评论0 收藏0
  • webpack的编译&amp;构建

    摘要:的编译构建上一篇文章详解中介绍了基于事件流编程,是个高度的插件集合,整体介绍了的编译流程。本文将单独聊一聊最核心的部分,编译构建。的编译重要的构建节点的构建中总会经历如下几个事件节点。 webpack的编译&构建 上一篇文章webpack详解中介绍了webpack基于事件流编程,是个高度的插件集合,整体介绍了webpack 的编译流程。本文将单独聊一聊最核心的部分,编译&构建。 web...

    roland_reed 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<