2015-08-31 89 views
2

我想更改多維數組中的鍵名。重命名多維數組中的鍵

我的數組:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [fruit namé] => Banana 
     ) 
    [1] => Array 
     (
      [id] => 2 
      [fruit namé] => Apple 
     ) 
) 

我的功能:

function renameFields($old, $new, $arr) { 
    foreach ($arr as $k=>$v) { 
     $arr[$k][$new] = $arr[$k][$old]; 
     unset($arr[$k][$old]); 
    } 
} 

renameFields("fruit namé", "name", $arr); 

-

它適用於id而不是在那裏,像fruit namé口音。

-

編輯
我知道這是一個不好的做法,有一些特殊的字符作爲重點,但是這DATAS從法國系統附帶...

+0

爲什麼你要做'global $ arr;'如果你將'$ arr'傳遞給你的函數? –

+0

我已將它從該函數中刪除。 – pocpoc

+0

[在PHP中,如何更改數組元素的鍵?](http://stackoverflow.com/questions/240660/in-php-how-do-you-change-the-key-of -an-array-element) – Pavlin

回答

2

您需要到任何一個)通$arr你的功能參考或b)有renameFields返回更新的數組。

你的代碼目前修改$arr數組的副本(因爲這是被傳遞給renameFields當它被稱爲),並且永遠不會更新存在的renameFields功能之一。

所以,你需要做的兩種:

function renameFields($old, $new, &$arr) { 
    foreach ($arr as $k=>$v) { 
     $arr[$k][$new] = $arr[$k][$old]; 
     unset($arr[$k][$old]); 
    } 
} 

renameFields("fruit name", "name", $arr); 

這將通過引用傳遞$arr

或者:

function renameFields($old, $new, $arr) { 
    foreach ($arr as $k=>$v) { 
     $arr[$k][$new] = $arr[$k][$old]; 
     unset($arr[$k][$old]); 
    } 

    return $arr; 
} 

$arr = renameFields("fruit name", "name", $arr); 

這將對函數返回更新後的數組,然後你需要再更新變量。

P.S.這兩種情況下都不需要global $arr;

+0

兩種解決方案都是一樣的。 '水果名稱'仍然存在,它在數組的末尾添加了一個名爲'name'的新鍵。 – pocpoc

+0

@pocpoc:兩者對我來說都很好:http://codepad.org/49Uyac6k和http://codepad.org/cETp3doJ –

+0

由於他在原始函數中使用全局函數,因此它不應該是數組的副本,但他正在修改的實際數組本身。但是,這將是更正確的方法。 –

2

在鍵名中使用空格並不是一個好主意。你可以做到,但這是不好的做法。

這裏是我想出了:

$my_array = array(
    array(
     'id' => 1, 
     'fruit name' => 'Banana' 
    ), 
    array(
     'id' => 2, 
     'fruit name' => 'Apple' 
    ) 
); 

function renameFields($old, $new, $arr) { 
    $new_a = array(); 
    foreach ($arr as $a) { 
     $new_a[] = array(
      'id' => $a['id'], 
      $new => $a[$old] 
     ); 
    } 
    return $new_a; 
} 

$new_array = renameFields("fruit name", "name", $my_array); 

echo "<pre>"; 
print_r($new_array); 
echo "</pre>"; 

這是一個更好的主意,通過陣列的功能,而不是使用一個全球性的。

+0

爲什麼在密鑰名稱中使用空格是「不好的做法」? –

+0

php不能不在乎某個關鍵名稱中的字符是什麼。畢竟,它們只是字符串。在其他語言中,這可能是「不好的做法」,比如js,在這裏你可以使用'array.key'作爲一個簡短的訪問符號,而不是'array [key]'。 –

+0

我想這不是壞習慣,在關鍵名稱中有空格,但更多的是偏好。大多數爲命名設定標準的公司不會在關鍵名稱中使用空格。通過不使用空格,它只是使命名約定全面標準化。 – GrumpyToaster