如果 .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_match
function
$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 中的任何一个答案,因为它们的解决方案确实更简单。不管怎样,我已经尽力给你解决方案了!
我有 "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_match
function
$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
.
"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 中的任何一个答案,因为它们的解决方案确实更简单。不管怎样,我已经尽力给你解决方案了!