如何使用PHP检查变量中某些字符的存在

时间:2019-06-04 17:40:00

标签: php

我使用下面的代码通过php检查某些字符的存在,并且工作正常。

使用以下代码,我可以检查字符 a 是否存在于变量中并且可以正常工作。

$mystring = 'my food is okay. its delicious';
$findme   = 'a';
$pos = strpos($mystring, $findme);
if ($pos !== false) {
echo 'data found';
}

这是我的问题:我需要检查是否还存在多个字符,例如 m,e,s 等。有关如何实现此目标的任何想法。

3 个答案:

答案 0 :(得分:2)

执行此操作的方法很多,从使用多个strpos到在str_replace之后进行比较。在这里,我们可以将字符串拆分为一个数组,然后计算与另一个数组的交集:

$mystring = 'my food is okay. its delicious';
$findme   = ['m', 'e', 's'];

检查数组中的任何字符:

if(array_intersect($findme, str_split($mystring))) {
    echo "1 or more found";
}

检查数组中的所有字符:

if(array_intersect($findme, str_split($mystring)) == $findme) {
    echo "all found";
}

有趣的是,通过回调运行数组,并根据其是否在字符串中进行过滤。这将检查ANY:

if(array_filter($findme, function($v) use($mystring) {
                             return strpos($mystring, $v) !== false;
                         }))
{
    echo "1 or more found";
}

这将检查所有内容:

if(array_filter($findme, function($v) use($mystring) {
                             return strpos($mystring, $v) !== false;
                         }) == $findme)
{
    echo "all found";
}

答案 1 :(得分:2)

另一种方法是使用trim

$mystring = 'my food is okay. its delicious';
$findme = 'ames';

$any = trim($findme, $mystring) != $findme;
$all = !trim($findme, $mystring);

答案 2 :(得分:0)

此功能将为您解决问题:

/**
 * Takes an array of needles and searches a given string to return all
 * needles found in the string. The needles can be words, characters,
 * numbers etc.
 * 
 * @param array $needles
 * @param string $haystack
 * @return array|null
 */
function searchString(array $needles, string $haystack): ?array
{
    $itemsFound = [];
    foreach($needles as $needle) {
        if (strpos($haystack, $needle) !== false) {
            $itemsFound[] = $needle;   
        }
    }

    return $itemsFound;
}

https://3v4l.org/5oXGp