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

问题描述 投票:0回答:8

我有“原始列表”,我正在尝试使用 php 将其转换为“所需列表”。当 .jpg 出现在字符串末尾时,我什么也不做。如果 .jpg 不是字符串的末尾,我想将 .jpg 添加到末尾。 “原始列表”作为一个长字符串存储在 $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);

想法? 谢谢!

php string if-statement str-replace
8个回答
13
投票

只是为了好玩,如果存在则将其删除,然后添加它:

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

对于数组:

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

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

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

4
投票

这是一种方法:

$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;
});

2
投票

使用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", "$0.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
)

1
投票

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

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

1
投票

更具体的图像扩展,

通过 php 检查 JPG、PNG 和其他图像扩展名

preg_match
功能

$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"; 
}

1
投票

根据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 在他关于 jpg 图像的评论中提到的额外检查,这些图像可能以

.jpeg
结尾。


1
投票
$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 答案中的任何一个,因为他们的解决方案确实更简单。不管怎样,我已经尽力给你解决方案了!


0
投票

我几乎喜欢Roman的回答,但还可以进一步减少。

简单的

preg_replace()
调用将从字符串末尾开始,然后查找
.jpg
,并且仅在文件扩展名尚未位于字符串末尾时附加文件扩展名。

代码:(演示

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

var_export(
    preg_replace("/(?<!\.jpg)$/", ".jpg", $url_list)
);

输出:

array (
  0 => 'http://i.imgur.com/4ReyOhl.jpg',
  1 => 'http://i.imgur.com/4ReyOh2.jpg',
  2 => 'http://i.imgur.com/4ReyOh3.jpg',
)
© www.soinside.com 2019 - 2024. All rights reserved.