php 检查字符串是否以数组中的字符串结尾

u2nhd7ah  于 2023-09-29  发布在  PHP
关注(0)|答案(4)|浏览(119)

如何检测字符串是否以数组中的值结尾?

array('.1.jpg','.2.jpg','.3.jpg','.4.jpg','.5.jpg','.6.jpg','.7.jpg','.8.jpg','.9.jpg');

字符串可以是:image.1.jpg,也可以是image.11.jpg
但是我只需要在字符串以1结尾的情况下找到数组中的值。

gr8qqesn

gr8qqesn1#

如果需要使用字符串中的所有句点,那么只需获取从第一个句点到结尾的所有内容,并查看它是否在数组中:

if(in_array(strstr($string, '.'), $array)) {
    //yes
}

显然,像my.image.1.jpg这样的东西会失败,因为它会查找.image.1.jpg

7eumitmz

7eumitmz2#

一个很好的老解决方案,它也给你在数组中找到的索引:

function endsBy(string $str, array $arr): ?int
{
    $len = strlen($str);
    foreach ($arr as $i => $toTest) {
        $toTestLen = strlen($toTest);
        if ($toTestLen <= $len && substr_compare($str, $toTest, $len - $toTestLen) === 0) {
            return $i;
        }
    }

    return null;
}

如您的问题中所述使用它:

if (endsBy($myString, $array) !== null) {
    ...
}
whitzsjs

whitzsjs3#

if (in_array(substr($string, -6), $array)) {
    //yes
}

因为所有的例子都有相同的长度。无需REGEX或更换。

72qzrwbm

72qzrwbm4#

我也遇到过类似的情况。在我的例子中,我想测试文件名是否以给定的扩展名之一结束。allowedExtensions可以传递给函数或定义为常量。将来也可能会发生变化。
我是这样写的:

const allowedExtensions = ['.docx', '.jpg', '.txt', '.csv'];
const isAllowed = allowedExtensions.some((ext) => filename.endsWith(ext));

相关问题