从字符串末尾截取子字符串的 PHP 方法?

4
我有这样一种数组,我会让它变得非常简单易懂。
$picture = ( 'artist2-1_thumb.jpg',
             'artist2-2.jpg' ,
             'artist2-3_thumb.jpg',
             'artist2-4.jpg',
             'artist2-5_thumb.jpg');

现在我希望使用substr来获取仅包含thumb的新数组,得到类似于这样的新数组。
$picturethumbs = ( 'artist2-1_thumb.jpg',
                   'artist2-3_thumb.jpg',
                   'artist2-5_thumb.jpg');

如何截取字符串的一部分?

2个回答

8
你可以使用 array_filter() 来过滤数组,仅返回符合给定条件的项目:
$picturethumbs = array_filter($picture, function($v) {
  return strpos($v, '_thumb') !== false; 
});

将返回包含字符串_thumb的所有数组项。如果您不知道文件的扩展名,或者_thumb出现在字符串的末尾以外的位置(例如:my_thumb.gif仍然匹配),这可能非常有用。

$picturethumbs = array_filter($picture, function($v) {
  return substr($v, -10) === '_thumb.jpg'; 
});

返回数组中最后10个字符匹配 _thumb.jpg 的所有项。

根据您提供的示例数组,两者都会输出:

array
  0 => string 'artist2-1_thumb.jpg' (length=19)
  2 => string 'artist2-3_thumb.jpg' (length=19)
  4 => string 'artist2-5_thumb.jpg' (length=19)

这里有一个演示


1
@Legionar,我已经更新了,感谢你指出来(不过它那样也能工作,但最好还是明确一些)。 - billyonecan
2
但是如果“_thumb”在字符串的开头呢?标题中是“从字符串末尾截取”,但您的答案也会选择它,即使它不仅在字符串的末尾... - Legionar
@Legionar 那么它就会找到它。我假设 OP 想要获取包含“_thumb”的所有项目的数组。 - billyonecan

1

这里是您需要的:

$picturethumbs = array();

foreach ($picture as $val) {
  if (substr($val, -10) == '_thumb.jpg') {
    $picturethumbs[] = $val;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接