【问题标题】:Read external variable with create_function php使用 create_function php 读取外部变量
【发布时间】:2018-07-12 10:58:35
【问题描述】:

我需要为数组中的每个键附加一个前缀。它在我正在使用的 create_function 之外定义的前缀。我怎样才能从内部访问它?

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

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

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

谢谢!

【问题讨论】:

标签: php arrays array-map create-function


【解决方案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',
)

由于 create_function 自 7.2.0 起已弃用,我推荐我的一种替代方法。

【讨论】:

  • 这个"return '$groupName/'".'.$k;'"return '$groupName/'.\$k;" 更好吗?不错的逻辑谜题。
  • @Xorifelse,好多了。显然我的脑子还不够。
【解决方案2】:

你可以使用匿名函数:

<?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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多