使用create_function php读取外部变量

时间:2018-07-12 10:58:36

标签: php arrays array-map create-function

我需要在数组中的每个键后面添加一个前缀。前缀是在我正在使用的create_function之外定义的。如何从内部访问它?

这里是我的代码($ result是我的键数组=> value):

$groupName = $reader->getAttribute('name');

$resultKeyPrefixGroup = array_combine(
                    array_map(create_function('$k', 'return $groupName."/".$k;'), array_keys($result)),
                    $result
                );

谢谢!

2 个答案:

答案 0 :(得分:1)

这伤了我的脑袋,使我的脑袋四处逃逸:

<?php
$result = 
[
    '1' => 'One',
    '2' => 'Two'
];

$groupName = 'braves';

$resultKeyPrefixGroup = array_combine(
    array_map(
        create_function('$k', "return '$groupName/'.\$k;"),
        array_keys($result)
    ),
    $result
);
var_export($resultKeyPrefixGroup);

输出:

array (
    'braves/1' => 'One',
    'braves/2' => 'Two',
)

由于自7.2.0版起不推荐使用create_function,因此我建议使用一种替代方法。

答案 1 :(得分:0)

您可以使用匿名函数:

<?php
$result = 
[
    '1' => 'One',
    '2' => 'Two'
];

$prefix = 'pink/';
$prefix_key = function($str) use ($prefix) {
    return $prefix . $str;
};

$prefixed = array_combine(
    array_map($prefix_key, array_keys($result)),
    $result
);

var_export($prefixed);

输出:

array (
  'pink/1' => 'One',
  'pink/2' => 'Two',
)

尽管循环和构建新数组可能也一样:

foreach($result as $k => $v)
    $prefixed["pink/$k"] = $v;