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

本文來自GitHub開源項目

點我跳轉

30秒的PHP代碼片段

clipboard.png

精選的有用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

isLowerCase

如果給定字符串爲大寫,則返回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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章