2011-03-22 22 views
3

我有一個字符串這樣插入一個字符串轉換爲路徑

folder1/folder2/folder3/13007805372971.jpg 

我應該怎麼做追加前的文件名的字符串?我想看起來像這樣

folder1/folder2/folder3/sometext_13007805372971.jpg 
+0

前綴「folder1/folder2/folder3」總是一樣嗎? – cynicaloptimist 2011-03-22 08:25:59

+1

最好的解決方案是基於'pathinfo()'的方法,根據當前操作系統的規則實際刪除文件名,而不是使用斜槓'/' – Unicron 2011-03-22 08:26:45

+0

您是否找到了解決方案? :-) – 2011-03-22 09:17:29

回答

8

您可以使用pathinfo功能,其目的是解析路徑。

$s='folder1/folder2/folder3/13007805372971.jpg'; 
$x='sometext_'; 
$fos=pathinfo($s); 

$s2=$fos['dirname'].DIRECTORY_SEPARATOR.$x.$fos['basename']; 
+0

不錯!簡短易讀,獨立於平臺。加1! – davogotland 2011-03-22 08:30:25

3

您可以使用下面的代碼來實現。

$string   = 'folder1/folder2/folder3/13007805372971.jpg'; 
$last_slash_pos = strrpos($string, '/'); 
$path    = substr($string, 0, $last_slash_pos + 1); 
$filename   = substr($string, $last_slash_pos + 1); 

$filename_prefix = 'sometext_'; 
$new_filename  = $path . $filename_prefix . $filename; 

echo $new_filename; // Output: folder1/folder2/folder3/sometext_13007805372971.jpg 


View Live Version

+2

這很好,但不適用於Windows路徑'C:\ xyz'。 – Unicron 2011-03-22 08:26:01

5

可以使用SplFileInfo class

$file = new SplFileInfo('folder1/folder2/folder3/13007805372971.jpg'); 
printf('%s/sometext_%s', $file->getPath(), $file->getBasename()); 

也可以用它代替硬編碼的斜線到呼叫的DIRECTORY_SEPARATOR不變。

Live Demo

+2

對於SPL爲+1,代碼爲 – Unicron 2011-03-22 08:28:06

+1

的最少行爲printf解決方案+1 :) – kapa 2011-03-22 08:30:20

0

preg_replace("/\/([^\/]+)$/", "/sometext_\\1", "folder1/folder2/folder3/13007805372971.jpg");

這需要該部分的最後斜線後,並在其後增加sometext_權。

3
$filePath = 'folder1/folder2/folder3/13007805372971.jpg'; 
$str = 'sometext_'; 

$newPath = dirname($filePath) . DIRECTORY_SEPARATOR . $str . basename($filePath); 
+0

+1我比較喜歡這個。 – kapa 2011-03-22 08:34:32

0

使用pathinfo獲取文件名的組件,然後根據需要插入添加。

$path_parts =pathinfo($string); 
$string = $path_parts['dirname'].'/sometext_'.$path_parts['basename'];