2013-04-17 75 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

@傑克這對我來說工作得很好。 – 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); 
相關問題