Я работаю над следующей комбинацией array_combine и array_map - в идеале я хотел бы, чтобы что-то больше похожее на array_map_keys отображало функцию для переименования ключей. Пример:
$input = array(
'a'=>1
'b'=>2
);
$desired_output = array(
'prefix.a'=>1
'prefix.b'=>2
);
function rename_keys($input) {
array_combine(
array_map(
function($col) {
return 'prefix.'.$col;
},
array_keys($input)
),
array_values($input)
);
Это невозможно. Переименование означает - добавить новый ключ, удалить предыдущий ключ. Ни одна из этих функций не может этого сделать. array_map
не работает даже с ключами.
Повозился и добавил рабочий пример. С array_combine это достаточно компактно, но было просто любопытно, существует ли array_map_keys.
Самый компактный способ тут действительно старый добрый foreach
.
array_combine
не нужно. Простого foreach
должно быть достаточно.
$old = array(
'a'=>1,
'b'=>2
);
$new = array();
foreach ($old as $key => $value) {
$new['prefix.' . $key] = $value;
}
var_dump($new);
выход:
array(2) {
["prefix.a"]=>
int(1)
["prefix.b"]=>
int(2)
}
редактировать; На ваш вопрос уже был дан ответ здесь, включая тесты для различных подходов.
Вам просто нужно зациклить его с помощью $key и $value
$a = array('a'=>1,'b'=>2);
echo'<pre>';print_r($a);
$b=array();
foreach($a as $key => $value){
$b['prefix.'.$key] = $value;
}
echo'<pre>';print_r($b);die;
Выход:
$a:
Array
(
[a] => 1
[b] => 2
)
$b :
Array
(
[prefix.a] => 1
[prefix.b] => 2
)
Это цикл foreach, а не цикл for :-)
Вы пробовали что-нибудь, прежде чем опубликовать вопрос? Если да, опубликуйте свой код и результаты. Если нет, вам следует начать с нескольких попыток.