2010-10-07 123 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