У меня есть массив со всеми ключами в случае любовника, и мне нужно изменить их, чтобы первый символ был в верхнем регистре, например, ucfirs
. Возможно ли это без создания нового массива?Как изменить первый символ каждого ключа в массиве?
ответ
Это невозможно без создания нового массива, но вот напуганный один лайнер вы можете использовать:
$array = array_combine(
array_map('ucfirst', array_keys($array)),
array_values($array)
);
Он разбивает массив на клавиши и значения, преобразует ключи, а затем склеивает две части обратно вместе.
+1 .... это идеальный ответ .... :) –
Простой и чистый. Любить это. :) – dschu
попробовать это
foreach ($arr as $key=>$val){
unset($arr[$key]);
$key = ucfirst($key);
$arr[$key]=$val;
}
Попробуйте этот код:
foreach ($array as $key => $value) {
unset ($array[$key]);
$array[ucfirst($key)] = $value;
}
Верьте или нет, это на самом деле создает другой массив :) –
@Jack Это отлично работает для меня. – Fluitketel
@Fluitketel Конечно, он работает. Я просто говорю, что копия была сделана внутренне в тот момент, когда вы 'unset ($ array [$ key])' впервые. –
попробуйте это. он будет работать и для вложенного массива.
<?php
function ucfirstKeys(&$data)
{
foreach ($data as $key => $value)
{
// Convert key
$newKey = ucfirst($key);
// Change key if needed
if ($newKey != $key)
{
unset($data[$key]);
$data[$newKey] = $value;
}
// Handle nested arrays
if (is_array($value))
{
ucfirstKeys($data[$key]);
}
}
}
$test = array('foo' => 'bar', 'moreFoo' => array('more' => 'foo'));
ucfirstKeys($test);
print_r($test);
Невозможно без создания нового массива. –
Можете ли вы объяснить, зачем вам это нужно? Почему имеет значение, что ключи ucfirst? Причина, по которой я спрашиваю, заключается в том, что я думаю, что вы приближаетесь к проблеме из-за неправильного угла. – Gordon