2010-10-07 124 views
3

想想這樣的數組:是否可以將參數傳遞給assoc數組?

... 
"key1" => some_call("val1", $params), 
"key2" => some_call("val1", $params), 
... 

現在我想傳遞參數($ params)方法解決我的數組項

$x = $array['key1'] , $params ... 

是有一些方法可以做這樣的事情是什麼時候?

UPDATE

爲什麼我喜歡這樣做呢? 我使用的是codeigniter,在語言文件中是一個assoc數組,其右側用其預測語言保存文本。我想濫用這一點,並希望加載 電子郵件模板,其中我傳遞一個參數,其中保存的值將在模板中被替換的shell。

更新2

爲PHP 5.2。*

+1

你能請澄清你的問題? ''key1「=> some_call(」val1「,$ params)'會將'some_call(」val1「,$ params)'的返回值添加到數組中。 – 2010-10-07 13:39:05

+2

如果你解釋了你想要用你的代碼實現的內容,這將有所幫助......也許有一個更容易解決你的問題(這可能不是參數部分)。 – Select0r 2010-10-07 13:42:47

回答

4

由於PHP 5.3,你可以使用匿名函數。也許你想是這樣的:

<?php 

function some_call($arg,$params) 
{ 
    echo "$arg: ",count($params),"\n"; 
} 

$array = array(
    'key1' => function($params) { some_call('val1',$params); }, 
    'key2' => function($params) { some_call('val1',$params); } 
); 

$array['key1'](array(1,2,3)); 
+0

oooh nooo :-)在php 5.2.1中不起作用?? – helle 2010-10-07 14:39:09

+0

無論如何,我可以在5.2.1版本上安裝/插件功能嗎? – helle 2010-10-07 14:44:18

+0

你可以使用'create_function',但你**不會**。或者你可以定義正常的非lambda函數。另一個變體是使用[prephp](http://github.com/nikic/prephp)將PHP 5.3源代碼編譯爲PHP 5.2源代碼。但我認爲這已經不夠穩定了。 – NikiC 2010-10-11 11:06:58

1

將$ x上的陣列?

$x[] = $array['key1'] , $params ... 

$x = array($array['key1'] , $params ...) 

或一個連接字符串

$x = $array['key1'] . $params ... // use the . to concat 
3

,而不是匿名函數(也就是說,如果你正在使用PHP5 < 5.3),那麼你可以使用create_function()函數來實現你想要什麼:

function some_call($arg, $params) 
{ 
    echo $arg, ': ', count($params), "\n"; 
} 

$array = array(
    'key1' => create_function('$params', 'some_call("val1", $params);'), 
    'key2' => create_function('$params', 'some_call("val2", $params);'), 
); 

$array['key1'](array(1,2,3)); 
+0

用於實際代碼:'key1'=> create_function('$ params','return some_call(「val1」,$ params);')。那麼我可以直接訪問結果 – helle 2010-10-11 21:16:37