PHP изменяет часть строки
У меня есть система php, которая загружает изображения и добавляет их имена к суффиксам -med -slider и т. Д., В зависимости от размера изображения. Однако только одно из имен файлов изображений сохраняется в базе данных, поэтому, когда я хочу отобразить изображение и вызвать имя файла из базы данных, я получаю что-то вроде:
filename-med.jpg как я могу изменить это, чтобы я мог заменить -med на -slider? Это возможно? Я не очень хорош в регулярных выражениях, и я предполагаю, что мне придется использовать это?
7 ответов
Используйте str_replace() как str_replace( '-med', '-slider', $file_name )
Regex в этом случае не является излишним.
Из str_replace()
Решения, представленные на данный момент, ответ Capsule является лучшим, но даже это не гарантирует работу для всех возможных имен файлов. Сбой в маловероятном (но очень возможном) случае, когда строка "-med.jpg" встроена в более крупное имя файла: например, filename-med.jpg_updated.jpg
, Это также не удается, если имя файла имеет .jpeg
расширение.
100% надежное решение легко достигается с помощью простого регулярного выражения:
$re = '/-med\.(jpe?g|gif|png)$/mi';
$filename = preg_replace($re, '-slider.$1', $filename);
Обратите внимание, что это решение легко поддерживает и другие типы расширений файлов изображений.
Это тривиально, вам даже не нужно регулярное выражение, чтобы сделать это. Функция str_replace (http://uk2.php.net/str_replace) - это то, что вам нужно.
$old_filename = "foo-med.jpg"
$new_filename = str_replace('-med','-slider',$old_filename);
Нет необходимости в регулярных выражениях, это излишне.
Я бы также включил ".jpg" в строки сена И замены, так как имя файла уже может содержать "-med", например, "test-med-med.jpg".
str_replace('-med.jpg', '-slider.jpg', $filename);
Я бы предложил просто сохранить часть изображения с именем "filename", а затем добавить -med.jpg, -slider.jpg ... и т. Д. Во время выполнения.
Но - если вы предпочитаете придерживаться того, что у вас есть, просто используйте:
$myFile = "filename-med.jpg";
echo str_replace('-med', '-slider', $myFile);
Пытаться:
$newFilename = str_replace("-med", "-slider", "filename-med.jpg"):