2013-03-21 78 views
0

我想將圖像的名稱分成兩個單獨的字符串,它們與其相關實際名稱及其文件格式。

所以說,例如圖像是:

example.jpg

我想有一個像輸出:

echo $name; 
// outputs "example" 
echo $format; 
// outputs ".jpg" 

什麼是做到這一點使用PHP的最佳方法?

任何意見,建議或意見將不勝感激!

我知道這會得到RTM響應,但如果你不知道你在找什麼準確地開始,找到正確的東西並不是一件容易的事情,這就是爲什麼我要求「最好「的解決方案來自那些比我更瞭解這項任務的人。

+6

['pathinfo'(http://php.net/pathinfo) – deceze 2013-03-21 11:29:16

+0

@deceze謝謝你的評論,我現在要經過這個! – 2013-03-21 11:32:24

回答

6
<?php 
$path_parts = pathinfo('example.jpg'); 

echo $path_parts['dirname'], "\n"; 
echo $path_parts['basename'], "\n"; 
echo $path_parts['extension'], "\n"; 
echo $path_parts['filename'], "\n"; // since PHP 5.2.0 
?> 

編號:http://php.net/pathinfo

+0

感謝這個例子,我之前使用過parse_url(),所以我很熟悉這種輸出。 – 2013-03-21 11:43:40

4

編輯:

第一溶液(不是最好的,壽):

list($name, $format) = explode('.', 'example.jpg'); 

二(更好的)解決方案:

$info = pathinfo('example.jpg'); 
$name = $info['filename']; 
$format = $info['extension']; 

第一個是不是很好,因爲事情像'example.whatever.jpg'會失敗。 第二個更好。謝謝大家指出。

+0

如果名稱是'example.lol.jpg'會怎麼樣?使用[pathinfo](http://php.net/manual/en/function.pathinfo.php)代替:) @downvoters請不要:p – HamZa 2013-03-21 11:30:37

+0

你不應該在文件名中使用點,但公平點 – andy 2013-03-21 11:35:31

+1

@你爲什麼不應該?除了編寫不考慮這種可能性的代碼的程序員外,沒有任何規則可以阻止它。 – deceze 2013-03-21 11:37:04

2

如果您將文件存儲在系統中並具有完整路徑的圖像,則可以使用pathinfo($ imagefullpath)。

看看下面的鏈接瞭解更多信息。

http://php.net/manual/en/function.pathinfo.php

+0

雖然這是正確的答案,並且您確實提供了第一個答案,但@PrasanthBendra的答案是描述性的,並且格式良好,並且具有關於函數使用的更多信息。出於這個原因,我選擇他的答案是正確的,謝謝你的反饋! – 2013-03-21 12:11:29

+0

@indigoldentity:np老兄..我想解決這個問題。 :) – 2013-03-21 12:13:04

+0

謝謝你,希望我能爲你做一樣的工作:) – 2013-03-21 12:15:33

2

你可以使用爆炸:由於Wooble指出,上面的代碼:

這甚至file.name.txt

$filename = "myfile.txt"; 
$parts = explode(".",$filename); 
$extension = end($parts); 
$name = str_replace("." . $extension,"",$filename); 

編輯由哈姆扎DzCyber​​DeV .TXT取將在foo.jpg.bar.baz.jpg上失敗。因此,這裏的另一種解決方案:

$filename = "foo.jpg.bar.baz.jpg"; 
$parts = explode(".",$filename); // Explode with dot as delimiter 
$extension = array_pop($parts); // Remove the last part from $parts and put it in $extension 
$name = implode('.', $parts); // Join the pieces with a dot and store it in $name 
+0

嘿,那裏,謝謝你的輸入,所以這顯然可以解決怪異的名字,例如:eg.example.image.jpg?我總是找到解決方案的其他方法,但是對於一個函數(pathinfo())而不是3更好嗎?只是出於興趣的緣故。 – 2013-03-21 11:42:46

+1

它確實與eg.example.image.jpg一起工作;文件名爲:eg.example.image,擴展名爲jpg。 – 9edge 2013-03-21 11:47:05

2

你可以使用正則表達式:

$filename = 'test.hello.jpg'; 

class FileMatcher 
{ 
    public $filename; 
    public $name; 
    public $extension; 

    public function __construct($filename) 
    { 
     $this->filename = $filename; 
     $this->name  = $this->name(); 
     $this->extension = $this->extension(); 
    } 

    public function extension() 
    { 
     $regex = '/[.*].([\w]+)$/i'; 

     preg_match($regex, $this->filename, $matches); 

     if(count($matches) < 1) return false; 

     return str_replace('.','',$matches[0]); 
    } 

    public function name() 
    { 
     return str_replace($this->extension(), "", $this->filename); 
    } 
} 

$file = new FileMatcher($filename); 

echo "Filename : " . $file->filename . '<br>'; #=> Filename : test.hello.jpg 
echo "Name  : " . $file->name . '<br>';  #=> Name  : test.hello 
echo "Extension: " . $file->extension . '<br>'; #=> Extension : jpg 
+1

哇,這很有趣:)我喜歡這樣的答案,它讓我想,非常感謝你! – 2013-03-21 11:46:56

+0

謝謝!很高興我能幫上忙 :) – andy 2013-03-21 11:47:51