检查是否包含子串和截取子串

<?php
$haystack = 'believe'; // 父串


$needle = 'php'; // 子串
$pos = strpos($haystack, $needle);
if ($pos !== false) {
    echo "『{$haystack}』包含子串『{$needle}』,位置:$pos" . PHP_EOL;
} else {
    echo "『{$haystack}』不包含子串『{$needle}』" . PHP_EOL; // 『believe』不包含子串『php』
}


$needle = 'lie'; // 子串
$pos = strpos($haystack, $needle);
if ($pos !== false) {
    echo "『{$haystack}』包含子串『{$needle}』,位置:$pos" . PHP_EOL; // 『believe』包含子串『lie』,位置:2
} else {
    echo "『{$haystack}』不包含子串『{$needle}』" . PHP_EOL;
}


$needle = 'LIE'; // 子串
$pos = strpos($haystack, $needle); // 重要提醒:strpos('父串', '子串')区分大小写
if ($pos !== false) {
    echo "『{$haystack}』包含子串『{$needle}』,位置:$pos" . PHP_EOL;
} else {
    echo "『{$haystack}』不包含子串『{$needle}』" . PHP_EOL; // 『believe』不包含子串『LIE』
}


$pos = stripos($haystack, $needle); // 重要提醒:stripos('父串', '子串')不区分大小写
if ($pos !== false) {
    echo "『{$haystack}』包含子串『{$needle}』,位置:$pos" . PHP_EOL; // 『believe』包含子串『LIE』,位置:2
} else {
    echo "『{$haystack}』不包含子串『{$needle}』" . PHP_EOL;
}


// 如果PHP≥8强烈推荐使用str_contains()函数判断是否包含子串,重要提醒:str_contains('父串', '子串')区分大小写
if (!function_exists('str_contains')) {
    /**
     * 确定字符串是否包含指定子串
     *
     * @param string $haystack 在其中搜索的字符串
     * @param string $needle 要在haystack中搜索的子串
     * @return bool 如果needle在haystack中,返回true,否则返回false
     */
    function str_contains(string $haystack, string $needle): bool
    {
        $pos = strpos($haystack, $needle);
        return $pos !== false;
    }
}
echo var_export(str_contains('believe', 'lie'), true) . PHP_EOL; // true
echo var_export(str_contains('believe', 'LIE'), true) . PHP_EOL; // false


// 截取字符串(从字符串'believe'里截取子串,从第2个字符开始,共截取3个字符)
echo substr('believe', 2, 3) . PHP_EOL; // lie


// 截取SHA-512哈希值中间100个字符
$sha512 = hash('sha512', 'believe'); // 说明:SHA-512哈希值长度为128个字符
echo substr($sha512, 14, 100) . PHP_EOL;


//========== 总结 ==========//
// 1、strpos('父串', '子串')区分大小写,而stripos('父串', '子串')不区分大小写。
// 2、如果PHP≥8强烈推荐使用str_contains()函数判断是否包含子串,注意该函数和strpos()一样都是区分大小写的。

Copyright © 2024 码农人生. All Rights Reserved