массивы — чтение внешней переменной с помощью create_function Stack Overflow

Мне нужно добавить префикс к каждому ключу в моем массиве. Префикс определяется вне функции create_function, которую я использую. Как я могу сделать это доступным изнутри?

Вот мой код ($ result — это мой массив ключей => value):

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

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

Спасибо!

2

Решение

Это повредило мой мозг, оборачивая мою голову, избегая последовательности:

<?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, я бы рекомендовал один из моих альтернативных подходов.

1

Другие решения

Вы можете использовать анонимную функцию:

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

По вопросам рекламы [email protected]