2014-04-15 49 views
0

我採取了以下輸入微調功能是給意外的值PHP

$file = 'D:/php/testapp/ta_bles.json'; 
$table = trim(end(explode("/", $file)), '.json'); 

而是讓ta_bles因爲它給ta_ble 任何一個可以幫助我發生了什麼

但是當輸出我用下面的邏輯給出了預期的結果

$table = str_replace('.json', '', end(explode("/", $file))); 
+2

看一看什麼'trim'第二個參數的實際含義。 – Gumbo

+0

只有當我在名稱中使用下劃線時,問題纔會發生 –

+0

編輯完成後,@Gumbo出現了問題所在(請參閱[文檔](http://www.php.net/manual/) EN/function.trim.php))。如果他不寫答案,我會盡快做。 – Sumurai8

回答

3

它沒有按預期工作的原因是因爲e trim()(及相關函數)的第二個參數用作字符集;所以在"json.json"的極端示例中,您最終會得到一個空字符串,因爲它會分別修剪每個字符。

你可以這樣操作比較這樣的:

preg_replace('/^[.json]+|[.json]+$/', '', $str); 

只得到"tables"你應該使用pathinfo()而不是試圖推出自己的:

$table = pathinfo('d:/php/testapp/tables.json', PATHINFO_FILENAME); 
0

可以使用rtrim()到最後刪除.json字符串。

$file = "D:/php/testapp/table.json"; 
$table = rtrim($file,'.json'); 
echo $table; 

輸出:D:/php/testapp/table
然後你就可以爆炸,並得到表。

但它不是從目錄中獲取文件名的有效方法。您應該使用pathinfo()來獲取文件名,如Jack提到的。

Demo

+1

您是否使用''json.json''測試了這個? –

+1

你誤解了'rtrim()'的第二個參數是如何工作的。它將傳遞的字符串作爲第二個參數,將它們拆分爲單獨的字符,刪除重複項,並搜索字符串的右端並刪除找到的所有匹配項。 **它不搜索'.json'。** –

+0

@Jack:是的,我沒有考慮這一點。 –