2010-01-08 89 views
1

我需要一個具有可變數量參數的函數來訪問多維數組的元素。我這樣做($ this - > _ config是數組)...訪問多維數組元素,使用函數

function item() 
{ 
    if(func_num_args() != 0){ 
     $config = $this->_config; 
     $args = func_get_args(); 
     foreach($args as $item){ 
      $config = $config[$item]; 
     } 
     unset($args); 
     return $config; 
    } 
    else throw new Exception('An item index is required.'); 
} 

有沒有辦法做得更好?謝謝大家!

回答

1

在你的問題,你說你有一個多維數組,所以我把它是這樣的:

調用item('foo', 'bar', 'baz')將通過最後一個陣列上運行所有的方式,並返回3.如果這是你可以寫$config['foo']['bar']['baz']或將你的配置放在ArrayObject中,並使用數組訪問表示法或$config->foo->bar->baz(儘管所有嵌套數組也必須是ArrayObjects)。

如果你想保留這個函數,你應該在抓取它之前在索引上添加一些檢查,因爲PHP會提出一個關於未定義索引的通知。另外,爲什麼不使用InvalidArgumentException而不是Exception。適合這種情況。

編輯:刪除了答案的某些部分,因爲它是評論
TBH後更喜歡大聲思維

編輯,我覺得這是一個比較尷尬的方式來重塑通過類似的方法數組訪問這個。在我看來,您應該在構建過程中將整個配置或子集傳遞給對象,並讓它們通過常規數組訪問器來獲取所需的任何內容。這將從您的configManager中獲得decouple您的對象,並允許稍後修改。

+0

該方法位於一個類中,該類管理存儲在數組中的各種配置項($ this - > _ config)。這個類加載了更多的配置文件,名爲$ config,並將所有文件中的oll項添加到$ this - > _ config中。現在,可以在配置文件「config_file.php」中創建一個具有以下元素的數組$ config: $ config ['config_file'] ['element1'] ='aaa'; $ config ['config_file'] ['element2'] ='aaa'; $ config ['config_file'] ['database'] ['user'] ='user'; 因此,調用另一個類... $ configmanager-> item('config_file','database','user'),它必須返回'user'。 – flux 2010-01-08 09:52:45

+0

在實踐中,我不知道有多少個參數被傳遞......謝謝你的建議,第二個可能對我有用 – flux 2010-01-08 09:58:02

+0

好吧,你是對的......我想我會做這樣,無論數組$ this-> config中有什麼,它都會返回內容,如果它是另一個數組。非常感謝您的幫助 – flux 2010-01-09 15:17:54