2014-10-05 39 views
2

我有這個PHP數組;快速的方式來重命名關聯數組的這個數組的鍵

array(
    (int) 0 => array(
     'KeyName' => array(
      'id' => '1', 
      'number' => '11A', 
     ) 
    ), 
    (int) 1 => array(
     'KeyName' => array(
      'id' => '2', 
      'number' => '22A', 
     ) 
    ), 
    (int) 2 => array(
     'KeyName' => array(
      'id' => '16', 
      'number' => '001A', 
     ) 
    ) 
) 

我想改變'KeyName''NewKeyName'使得新的數組變;

array(
    (int) 0 => array(
     'NewKeyName' => array(
      'id' => '1', 
      'number' => '11A', 
     ) 
    ), 
    (int) 1 => array(
     'NewKeyName' => array(
      'id' => '2', 
      'number' => '22A', 
     ) 
    ), 
    (int) 2 => array(
     'NewKeyName' => array(
      'id' => '16', 
      'number' => '001A', 
     ) 
    ) 
) 

什麼是快速的方法來做到這一點?

下面是我試過的代碼;

foreach ($array as $key) 
{ 
    $array[$key]['KeyName']=$array[$key]['NewKeyName']; 
} 

但我得到了一些非法的抵消錯誤。有更好的方法來解決這個問題嗎?

+0

+1問得好搜索棧! – 2014-10-05 06:22:13

回答

1

在您的代碼中,您獲取的值不是密鑰$key。您必須嘗試$array as $key => $val而不是$array as $key。此外,一旦進入循環,只需將值複製到新索引並取消設置現有索引。

foreach ($array as $key => $val) 
{ 
    $array[$key]['NewKeyName'] = $array[$key]['KeyName']; 
    unset($array[$key]['KeyName']); 
} 
1

既然你正在尋找替換,只是使用foreach內部的副本:

基本上你把數組的整個副本而不是使用關鍵的:

foreach ($array as $key) { 
       //^this is the copy of that sub array not the key 
    $array[$key]['KeyName']=$array[$key]['NewKeyName']; 
} 

所以,如果你想終於在一個新問題:

$new_array = []; 
foreach($array as $key => $value) { 
       //^keys goes here 
    $new_array[$key]['NewKeyName'] = $value['KeyName']; 
} 

或者因爲你不能引用鍵:

foreach($array as $key => $value) { 
    $array[$key]['NewKeyName'] = $value['KeyName']; 
    unset($array[$key]['KeyName']); 
} 
1

試試這個代碼,它應該工作:有可用的