2010-02-06 88 views
26

在一個陣列,如下面的人,我怎麼可能重命名「fee_id」到「身份證」?PHP重命名的數組鍵的多維數組

Array 
(
    [0] => Array 
     (
      [fee_id] => 15 
      [fee_amount] => 308.5 
      [year] => 2009     
     ) 

    [1] => Array 
     (
      [fee_id] => 14 
      [fee_amount] => 308.5 
      [year] => 2009 

     ) 

) 
+9

是該數據從數據庫中來嗎?你可以改變查詢嗎? 'SELECT fee_id as id,fee_amount as amount,year FROM .....'? – gnarf 2010-02-06 11:56:29

+0

是的,但這種陣列和一族使用它遍佈應用程序的查詢和在一個地方的輸出更易於只是改變。 – stef 2010-02-06 13:28:11

+0

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

回答

37
foreach ($array as $k=>$v) 
{ 
    $array[$k] ['id'] = $array[$k] ['fee_id']; 
    unset($array[$k]['fee_id']); 
} 

這應該工作

+2

你可能想把它作爲foreach(array_keys($ array)作爲$ k)'或'foreach($ array作爲$ k => $ v)' – gnarf 2010-02-06 11:53:53

+0

謝謝,我忘了=> $ v – lamas 2010-02-06 11:55:21

+4

這會改變爲什麼不使用'$ v ['fee_id']'而不是'$ array [$ k] ['fee_id']''來使用新的密鑰 – Oleg 2014-10-29 09:53:20

0

將當前的'fee_id'值複製到名爲'id'的新密鑰並取消設置上一個密鑰?

foreach ($array as $arr) 
{ 
    $arr['id'] = $arr['fee_id']; 
    unset($arr['fee_id']); 
} 

沒有內建做這樣薄AFAIK功能。

+4

你必須使$ arr成爲一個引用,'foreach(... as&$ arr)'。否則,$ arr中的更改不會更改$ array。 – VolkerK 2010-02-06 11:48:54

+3

這不起作用,PHP手冊說:除非數組被引用,否則foreach在指定數組的副本上操作,而不是數組本身 – 2010-02-06 11:49:46

+0

啊,感謝您的更新。沒有意識到:-)。 – TheGrandWazoo 2010-02-06 11:51:51

1
$arrayNum = count($theArray); 

for($i = 0 ; $i < $arrayNum ; $i++) 
{ 
    $fee_id_value = $theArray[$i]['fee_id']; 
    unset($theArray[$i]['fee_id']); 
    $theArray[$i]['id'] = $fee_id_value; 
} 

這應該工作。

+2

$ i lamas 2010-02-06 11:52:51

+0

因爲它每次重新計數? – 2010-02-06 11:56:14

+0

是的,假設他有一個大陣,這將每次都會計數,頁面加載速度會變慢/服務器負載將會增加 – lamas 2010-02-06 11:59:52

-3

我一直在試圖解決這個問題,使用遞歸函數一兩個小時,但最後我意識到,我們並不需要遞歸的。以下是我的方法。

$search = array('key1','key2','key3'); 
$replace = array('newkey1','newkey2','newkey3'); 

$resArray = str_replace($search,$replace,json_encode($array)); 
$res = json_decode($resArray); 

這樣我們可以避免循環和遞歸。

希望它有幫助。

+0

這是一個非常簡潔的做法。表現很好嗎?我想它很快就能在PHP中使用字符串。 – djskinner 2012-08-20 10:51:43

+0

如果你正在搖擺關聯數組,請確保使用json_decode的第二個參數和Antonio的解決方案:'$ res = json_decode($ resArray,true);'謝謝,安東尼奧。我剛加入SO只是爲了upvote和「是的!」這個。 – 2012-10-23 20:30:00

+0

這對喇嘛的答案的優點是它保持數組的順序相同。 – Waggers 2013-03-26 11:14:36

14

你可以使用array_map()來做到這一點。

$myarray = array_map(function($tag) { 
    return array(
     'id' => $tag['fee_id'], 
     'fee_amount' => $tag['fee_amount'], 
     'year' => $tag['year'] 
    ); }, $myarray); 
0

這是工作溶液,我測試它。

foreach ($myArray as &$arr) { 
    $arr['id'] = $arr['fee_id']; 
    unset($arr['fee_id']); 
} 
+0

請注意,在這樣的for循環中使用引用變量可能是一個可怕的想法。請參閱http://stackoverflow.com/questions/3307409/php-pass-by-reference-in-foreach – Pang 2016-08-31 07:03:17

0

而維持秩序的片段下方將重新命名關聯數組鍵(有時...我們必須)。如果您需要全部更換物品,您可以用新的鑰匙的$值代替。

$old_key = "key_to_replace"; 
$new_key = "my_new_key"; 

$intermediate_array = array(); 
while (list($key, $value) = each($original_array)) { 
    if ($key == $old_key) { 
    $intermediate_array[$new_key] = $value; 
    } 
    else { 
    $intermediate_array[$key] = $value; 
    } 
} 
$original_array = $intermediate_array; 
0

轉換0-> feild0,1-> field1,2-> FIELD2 ....

這僅是一個實例,其中i的串得到逗號分隔值,並轉換成多維數組和數組

<?php 

    $str = "abc,def,ghi,jkl,mno,pqr,stu 
    abc,def,ghi,jkl,mno,pqr,stu 
    abc,def,ghi,jkl,mno,pqr,stu 
    abc,def,ghi,jkl,mno,pqr,stu; 

    echo '<pre>'; 
    $arr1 = explode("\n", $str); // this will create multidimensional array from upper string 
    //print_r($arr1); 
    foreach ($arr1 as $key => $value) { 
     $arr2[] = explode(",", $value); 
     foreach ($arr2 as $key1 => $value1) { 
      $i =0; 
      foreach ($value1 as $key2 => $value2) { 
       $key3 = 'field'.$i; 
       $i++; 
       $value1[$key3] = $value2; 
       unset($value1[$key2]);   
      } 
     } 
     $arr3[] = $value1; 
    } 
    print_r($arr3); 


    ?> 
0

的然後使用foreach循環我改變密鑰值I寫了一個函數使用對象或陣列(單個或多維)做它看到https://github.com/joaorito/php_RenameKeys

貝婁是一個簡單的例子,你可以使用JSON功能,以取代做到這一點結合。

// Your original array (single or multi) 

$original = array(
'DataHora' => date('YmdHis'), 
'Produto' => 'Produto 1', 
'Preco'  => 10.00, 
'Quant'  => 2); 

// Your map of key to change 

$map = array(
'DataHora' => 'Date', 
'Produto' => 'Product', 
'Preco'  => 'Price', 
'Quant'  => 'Amount'); 

$temp_array = json_encode($original); 

foreach ($map AS $k=>$v) { 
    $temp_array = str_ireplace('"'.$k.'":','"'.$v.'":', $temp); 
    } 

$new_array = json_decode($temp, $array);