在二维数组的每一行中重命名键。

40
在下面的数组中,我该如何将"fee_id"重命名为"id"?
输入数组:
[
    ['fee_id' => 15, 'fee_amount' => 308.5, 'year' => 2009],
    ['fee_id' => 14, 'fee_amount' => 308.5, 'year' => 2009],
]

预期结果:

[
    ['id' => 15, 'fee_amount' => 308.5, 'year' => 2009],
    ['id' => 14, 'fee_amount' => 308.5, 'year' => 2009],
]

10
这些数据来自数据库吗?你能否更改查询语句中的内容吗?例如:SELECT fee_id as id, fee_amount as amount, year FROM ..... - gnarf
是的,但是这个数组和生成它的查询在整个应用程序中都被使用,只需在一个地方更改输出会更容易。 - stef
可能是重复的问题:在PHP中,如何更改数组元素的键? - Oleg
11个回答

-3

我一直在尝试使用递归函数解决这个问题,但最后我意识到我们根本不需要递归。以下是我的方法。

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

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

通过这种方式,我们可以避免循环和递归。

希望能有所帮助。


这是一种非常整洁的实现方式。性能如何?我想在PHP中使用字符串处理应该很快。 - djskinner
如果你正在使用关联数组,请确保在Antonio的解决方案中使用json_decode的第二个参数:$res = json_decode($resArray,true); 谢谢,Antonio。我刚刚加入SO只是为了点赞并表示“是的!”。 - Matthew Poer
这种方法的优点在于它可以保持数组的原始顺序,相较于拉马斯的答案。 - Waggers
4
@Antonio如何确保只有键受到影响而不是值?如果有两个键,例如“Phone”和“Home Phone”,并且$search = array('Phone', 'Home Phone')$replace=array('Mobile', 'Work Mobile'),那么它不会先替换两个键中的Phone,然后当搜索Work Phone时,因为现在新的键名将是Work Mobile,所以找不到它了。听起来合理吗? - Lucky Soni
5
这也存在改变数值的风险。如果$array['key1'] = 'key1',那么经过这段代码后,它将变成$array['newkey1'] = 'newkey1' - Scott Keck-Warren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接