如果 .jpg 不存在,如何将其添加到字符串末尾

How to add .jpg to end of string if it doesn't exist

我有 "original list",我正在尝试使用 php 将其转换为 "desired list"。当 .jpg 出现在字符串末尾时,我什么也不想做。如果 .jpg 不是字符串的末尾,我想将 .jpg 添加到末尾。 "original list" 作为一长串存储在 $badPhotos 中。

   Original List                                      Desired List
http://i.imgur.com/4ReyOhl                    http://i.imgur.com/4ReyOh1.jpg
http://i.imgur.com/4ReyOh2.jpg                http://i.imgur.com/4ReyOh2.jpg
http://i.imgur.com/4ReyOh3                    http://i.imgur.com/4ReyOh3.jpg
http://i.imgur.com/4ReyOh4                    http://i.imgur.com/4ReyOh4.jpg
http://i.imgur.com/4ReyOh5.jpg                http://i.imgur.com/4ReyOh5.jpg

如果有人添加了 ,我一直在使用以下方法修改字符串,其中 .属于,但现在我只需要在字符串不以 .jpg 结尾时修改字符串。

$badPhotos = str_replace(',', '.', $badPhotos);

想法? 谢谢!

您可以使用 strstr() 来确定它是否已经在字符串中。

$rightPhotos = array();
foreach($badPhotos as $photo){
  if !(strstr(substr($photo,-4), ".jpg")){
    $photo .= ".jpg";
  }
  $rightPhotos[] = $photo;
}

这是一种方法:

$str = 'http://i.imgur.com/4ReyOhl';
if (substr($str, -4, 4) != '.jpg') {
    $str .= '.jpg';
}

另一种选择,使用array_walk:

$arr[] = 'http://i.imgur.com/4ReyOhl';
array_walk($arr, function (&$v) {
    $v = substr($v, -4, 4) != '.jpg' ? $v . '.jpg' : $v;
});

纯属娱乐,如果有就删掉再添加:

$badPhotos = rtrim($badPhotos, '.jpg') . '.jpg';

对于数组:

$badPhotos = array_map(function($v) {
                           return rtrim($v, '.jpg') . '.jpg';
                       },
                       $badPhotos);

或者更适合文件名,只获取不带扩展名的名称,然后添加:

$badPhotos = pathinfo($badPhotos, PATHINFO_FILENAME) . '.jpg';

更具体的图像扩展,

Checks for JPG, PNG and other image extentions by the php preg_matchfunction

$string = "http://i.imgur.com/4ReyOhl";

if (preg_match('/(\.jpg|\.png|\.bmp)$/i', $String)) {
   echo "Already have an extention";
   
} else{
   echo "not image";
   $string .= ".jpg"; 
}

根据 OP 的最新评论,其中 $badPhotos 是一个数组,您可以采用以下方法:

$badPhotos = array(...);

foreach($badPhotos as $key => $value) {
    if(substr($value, -4, 4) !== '.jpg' || substr($value, -5, 5) !== '.jpeg') {
        $badPhotos[$key] = $value . ".jpg";
    }
}

注意: 这使用了 @MisterMartin 的答案的修改方法应用于数组的循环。它还使用 @uom-pgregorio 在他关于可能以 .jpeg.

结尾的 jpg 图像的评论中提到的额外检查

"One-line" 使用preg_replace函数的解决方案:

$url_list = [
    'http://i.imgur.com/4ReyOhl',
    'http://i.imgur.com/4ReyOh2.JPG',
    'http://i.imgur.com/4ReyOh3'
];

$url_list = preg_replace("/\/[^.]+(?!\.jpg)$/i", "[=10=].jpg", $url_list);

print_r($url_list);

输出:

Array
(
    [0] => http://i.imgur.com/4ReyOhl.jpg
    [1] => http://i.imgur.com/4ReyOh2.JPG
    [2] => http://i.imgur.com/4ReyOh3.jpg
)
$urls = array(
    'http://i.imgur.com/4ReyOhl',
    'http://i.imgur.com/4ReyOh2.jpg',
    'http://i.imgur.com/4ReyOh3',
    'http://i.imgur.com/4ReyOh4',
    'http://i.imgur.com/4ReyOh5.jpg',
);

$urls = array_map(function($value) {
    $path_info = pathinfo($value);
    if(!array_key_exists('extension', $path_info) || $path_info['extension'] != 'jpg') {
        return $value . '.jpg';
    }

    return $value;
}, $urls);

var_dump($urls);

我希望这是一个非常可靠的解决方案。另外,我更喜欢 AbraCadaver 和 RomanPerekhrest 中的任何一个答案,因为它们的解决方案确实更简单。不管怎样,我已经尽力给你解决方案了!