2010-11-21 100 views
3

我目前使用CodeIgniter。CodeIgniter - 無限參數?

我想寫一個函數,可以採取無限數量的參數。

所以在控制它會像

function test($name, $others){ 
    foreach($others){ 
     //do something 
    } 
} 

,我可以這樣稱呼它

example.com/control/test/some name/param1/param2/param3/param4/param5... 

我如何設置呢?

回答

6

您可以使用URI class中的uri_to_assoc函數獲取關聯的URI段數組。所以,在你的控制器,你可以做這樣的事情:

function test($name){ 
    $uri_seg = $this->uri->uri_to_assoc(4); 

    foreach($uri_seg as $para){ 
     // Do something with each of the URI segments passed in here after $name 
    } 
} 
+0

乾杯, 是否有一個獲得非關聯數組? 所以,只需一個數組('param1','param2','param3','param4','param5');'? – Hailwood 2010-11-21 09:59:46

+1

@Haiwood我認爲'segment_array()'函數應該做到這一點 – 2010-11-21 10:01:38

+0

爲什麼不使用php的本地[func_get_args](http://php.net/manual/en/function.func-get-args.php) – dsdsdsdsd 2016-05-23 14:45:14

6

你也可以做這樣的:

function foo($params=array()) 
{ 
    $params=func_get_args(); 
    //print_r($params); 
} 

所以任何網址,如:

site.com/controller/foo/param1/param2/param3/param4

將創建一組參數。

0

目前尚不清楚爲什麼您需要無限(可變)數量的參數,但您可能需要考慮爲什麼需要它們。

對於某些類型的參數,您可以使用替代URI語義。通常,URI設計是系統中事物的路徑。無限參數可能不涉及資源,而是描述其屬性。標籤就是一個很好的例子。

/chicken/red+tall+fat 

使用單個參數輕鬆實現CodeIgniter中的標籤實現。

如果參數是指一個節點,你可以考慮類似的方法:

/hen-house.bunk4.topshelf/chicken 

或者,如果作爲路徑,你可以使用上面的func_get_args()解決方案的層次是非常重要的。

+0

例如:你的應用程序有一個清單(待售房屋清單),而且用戶界面允許用戶用關鍵詞(例如「車庫,2房,陽臺,中央空調,壁爐」)過濾清單......如果您可以將這些過濾詞分配給網址,那麼您可以輕鬆地將鏈接發送到過濾列表(「www.example.com/garage/2bedrooms/balcony/central air/fireplace」) – dsdsdsdsd 2016-05-23 14:49:50