2012-07-18 104 views
2

我試圖從 - 字符串4305之後的字符串結尾獲取ID。下面的代碼從左到右工作,並顯示150.我怎樣才能讓它工作從右到左顯示4305之後 - ?PHP echo從右到左的一個字符串的一部分

$mystring = "150-Adelaide-Street-Brisbane-Cbd-4305"; 
    $mystring = substr($mystring, 0, strpos($mystring, "-")); 
    echo $mystring; 

更新:這確實是我需要的,但我敢肯定有一個更好的方式來寫它:

$mystring = "150-Adelaide-Street-Brisbane-Cbd-4305"; 
    $mystring = substr(strrev($mystring), 0, strpos(strrev($mystring), "-")); 
    echo strrev($mystring); 
+0

替代strpos-forward,尋找strpos-backward ..(或應用反轉換或分割或..) – 2012-07-18 02:14:38

+0

substr($ mystring,strrpos($ mystring,「 - 」)+ 1) – Matthew 2012-07-18 02:17:13

+0

^This is最合適的方式 - 即使有幾種可能性。 – 2013-01-01 23:44:48

回答

5

您可以使用strrpos獲得字符串中的最後連字符,然後在這個角色之後取其餘的字符串。

$mystring = "150-Adelaide-Street-Brisbane-Cbd-4305"; 
$mystring = substr($mystring, strrpos($mystring, "-") + 1); 
echo $mystring; 
+0

好吧,現在告訴我,如果你想從上面的字符串中提取「街道」,它會變得多麼容易?你可能會寫另一個類似的代碼行,對吧?現在,如果你想打電話是有效的,那麼我無話可說。但是,是的,如果它只是最後一個字。這很好。 – Starx 2012-07-18 02:23:54

+1

街道與中國的玉米價格有什麼關係?這不是試圖走街的問題。他想在最後得到這個ID – Kris 2012-07-18 02:25:42

+0

@Kris,如果你打算從字面上理解,問題是關於從右到左的字符串,哈哈。:)(乾杯) – Starx 2012-07-18 02:30:11

4

拆分它的-到一個數組中,並彈出關閉最後一個元素:

$mystring = "150-Adelaide-Street-Brisbane-Cbd-4305"; 
$parts = explode("-", $mystring); 
echo array_pop($parts); 

或者,如果你需要保持數組不變,使用end()前進到最後一個元素返回它:

echo end($parts)); 

這比使用strrpos()效率較低,但在情況下,當這不是一個問題,我會傾向,因爲它使用此方法不要求我仔細考慮字符串索引,並且如果您需要的不是第一個或最後一個分隔位置,則拉取數組索引要比從內部部件拉取字符串操作要容易一些。

+0

有沒有必要分割整個字符串。 – 2012-07-18 02:19:33

+1

我同意,爆炸功能似乎是最好的解決方案。我想他想從字符串中獲得ID,所以使用end()函數就是要使用的函數。 – 2012-07-18 02:21:00

+0

絕對不容易出現錯誤的位置。我曾經用$ parts [sizeof($ parts)-1] ... end()函數檢索最後一個元素,在這種情況下,我必須記住這一點。 – 2013-01-01 22:59:03

0

最簡單的方法是使用explode

通過使用explode,可以將字符串拆分爲數組,每個部分可以使用索引作爲單獨標識符訪問。

用法示例:

$mystring = "150-Adelaide-Street-Brisbane-Cbd-4305"; 
    $mystring = explode("-", $mystring); 
    echo $mystring[count($mystring)-1]; //Extract the last item 
+0

我不會說這是最簡單的,當然也不是最有效的。 – 2012-07-18 02:31:33

2

如果你像我的同事一個誰喜歡用正則表達式的一切......然後

$mystring = "150-Adelaide-Street-Brisbane-Cbd-4305"; 
    preg_match('~-(\d+)$~', $mystring, $matches); 
    echo $matches[1]; 
+0

數組/字符串函數可能執行得更快(沒有詳細標記臺階 - 但有一種感覺)。所需的匹配是簡單的方法,它需要正則表達式'/.*-(\d+)$/'寧願匹配需求 - 這是字符串末尾的幾個數字。 註冊一個可能的解決方案 - 但請更新模式,測試它,並在步驟1)後匹配失敗。 – 2013-01-01 23:23:57

+0

讓你的同事之一:http://www.regexbuddy.com。猜猜他/她會完全放棄它,它是建立更復雜的表達式和測試其性能的一個很好的工具。 – 2013-01-01 23:33:10

0

馬修張貼在上述評論,反向掃描速度更快,因爲僅在4個步驟後完成匹配 - 猜測沒有將語言需求轉換爲PHP語法的「更合適的方法」(這也是他們在學習C語言時如何教我的方式ntax):

echo substr($mystring, strrpos($mystring, "-") + 1); 

PHP manual。^

相關問題