2010-02-06 94 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);