Можно ли передать параметры в ассоциативный массив? - PullRequest
3 голосов
/ 07 октября 2010

подумайте о массиве, подобном следующему:

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

теперь я хочу передать параметры ($ params) при обращении к записям моего массива

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

есть ли способ что-то сделатькак это?

ОБНОВЛЕНИЕ

Зачем мне это делать?я использую codeigniter и в языковом файле есть массив ассоциаций, где правая сторона содержит текст на его предсказанном языке.я хочу немного злоупотребить этим и хочу загружать шаблоны электронной почты, где я передаю параметр, который содержит значения, оболочки которых должны быть заменены в шаблоне.

ОБНОВЛЕНИЕ 2

для php 5.2. *

Ответы [ 3 ]

4 голосов
/ 07 октября 2010

Начиная с 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));
3 голосов
/ 11 октября 2010

Вместо анонимных функций (т. Е. Если вы используете PHP5 <5.3), вы можете использовать функцию <a href="http://www.php.net/create_function" rel="nofollow"> 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));
1 голос
/ 07 октября 2010

Сделать $ x массивом?

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

или

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

или каскадная строка

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