2013-04-17 4 views
2

У меня есть массив со всеми ключами в случае любовника, и мне нужно изменить их, чтобы первый символ был в верхнем регистре, например, ucfirs. Возможно ли это без создания нового массива?Как изменить первый символ каждого ключа в массиве?

+0

Невозможно без создания нового массива. –

+0

Можете ли вы объяснить, зачем вам это нужно? Почему имеет значение, что ключи ucfirst? Причина, по которой я спрашиваю, заключается в том, что я думаю, что вы приближаетесь к проблеме из-за неправильного угла. – Gordon

ответ

6

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

$array = array_combine(
    array_map('ucfirst', array_keys($array)), 
    array_values($array) 
); 

Он разбивает массив на клавиши и значения, преобразует ключи, а затем склеивает две части обратно вместе.

+0

+1 .... это идеальный ответ .... :) –

+0

Простой и чистый. Любить это. :) – dschu

0

попробовать это

foreach ($arr as $key=>$val){ 
     unset($arr[$key]); 
     $key = ucfirst($key); 
     $arr[$key]=$val; 
     } 
3

Попробуйте этот код:

foreach ($array as $key => $value) { 
     unset ($array[$key]); 
     $array[ucfirst($key)] = $value; 
} 
+0

Верьте или нет, это на самом деле создает другой массив :) –

+0

@Jack Это отлично работает для меня. – Fluitketel

+0

@Fluitketel Конечно, он работает. Я просто говорю, что копия была сделана внутренне в тот момент, когда вы 'unset ($ array [$ key])' впервые. –

0

попробуйте это. он будет работать и для вложенного массива.

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