Мне нужно добавить префикс к каждому ключу в моем массиве. Префикс определяется вне функции create_function, которую я использую. Как я могу сделать это доступным изнутри?
Вот мой код ($ result — это мой массив ключей => value):
$groupName = $reader->getAttribute('name');
$resultKeyPrefixGroup = array_combine(
array_map(create_function('$k', 'return $groupName."/".$k;'), array_keys($result)),
$result
);
Спасибо!
Это повредило мой мозг, оборачивая мою голову, избегая последовательности:
<?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, я бы рекомендовал один из моих альтернативных подходов.
Вы можете использовать анонимную функцию:
<?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;