2011-03-31 105 views
0

我正在使用PHP爆炸函數。該功能用於檢測頁面URL。PHP拆分字符串

在我們的網站設置,該頁面的網址是:

  1. /應用/家庭/ (主頁)
  2. /應用/答案/列表(搜索列表頁)
  3. /應用/答案/細節/ A_ID/309 (答案詳細信息頁)
  4. /應用/答案/列表/會話/ L3NpZC9WVmpBQWlxaw%3D%3D

目前,我正在使用explode函數來分割字符串並將它們存儲在數組中。

$currentLocation =explode("/",$_SERVER["REQUEST_URI"]); 

Array ([0] => [1] => app [2] => answers [3] => list [4] => session [5] => L3NpZC9WVmpBQWlxaw%3D%3D) 

然後有很多的if else條件語句:

if ($currentLocation [2]=='home') 
     { 
      $this->data['pageURL']=$currentLocation [2]; //Home directory 
     } 
     else if($currentLocation [2]=='answers') 
     { 
      $this->data['pageURL']= $currentLocation [4]; 
     } 

我想知道是否有實現這一目標一個聰明的辦法。謝謝。 URL的/ app /部分總是固定的,其餘部分將會改變。

乾杯, 清

回答

1

一般來說,當你有很多的,如果像/否則條件,這將是更常見的使用switch語句來代替:

switch $currentLocation[2] { 
    case 'home' : $this->data['pageURL']=$currentLocation[2]; break; 
    case 'answers' : $this->data['pageURL']= $currentLocation[4]; break; 
    default: $this->data['pageURL']= $currentLocation[4]; break; 
} 

它比一堆elseif塊更整潔,但它並不是真的少了很多代碼。

但是在這種情況下,我會說你可能會使用一組重寫規則獲得更好的結果。你沒有指定它,但是鑑於你描述的URL,你可能在你的服務器配置中使用了mod_rewrite(或類似的)來將'friendly'URL重定向到實際的PHP頁面上?

這是我建議工作的地方。通過使用一組mod_rewrite規則,您可以讓PHP頁面接收正常的$_GET變量。

mod_rewrite允許你有像​​這樣的URL,但PHP程序會收到它,就好像用戶輸入了app.php?page=answers&section=detail&a_id=309一樣。重寫規則基於正則表達式,您可以使它們變得非常複雜,以允許各種不同的URL格式。

如果實現這一點,你很可能丟掉所有的工作你在節目中與explode()做,然後挑選出URL中的相關內容,並在你的服務器配置大約五線替換所有(.htaccess )。

希望有所幫助。

+0

我無法重寫URL結構。由於供應商不會允許我這樣做。謝謝Spudley。 – QLiu 2011-03-31 12:10:20

+0

@QLui:這真是一個恥辱,因爲它會是一個更好的方式。你確定嗎?這些日子是很常見的事情,很多常見的軟件包都依賴於mod_rewrite的友好URL(Drupal,Wordpress等等等等),所以我希望任何一個半得體的託管供應商都允許你這樣做。所以,如果你的主機供應商不允許你使用mod_rewrite,那麼我會說你的網絡主機錯了!有時間找到更好的人。 – Spudley 2011-03-31 12:14:44

+0

如果此功能在每次頁面加載時都運行,它是否會減慢速度? – QLiu 2011-03-31 12:16:53

2

查找Zend framework Router

+1

雖然這可以被認爲是一個正確的答案,我會給它一個-1,因爲這不以任何方式幫助OP。 – fabrik 2011-03-31 11:47:49

+2

OP沒有問任何問題。他想知道:) – Emmerman 2011-03-31 11:49:00

+0

你做了我的一天。我必須解除我的投票:D – fabrik 2011-03-31 11:49:44