【问题标题】:How to change array key of this array? [duplicate]如何更改此数组的数组键? [复制]
【发布时间】:2011-11-03 02:36:54
【问题描述】:

可能重复:
In PHP, how do you change the key of an array element?

这个数组

Array
(
    [0] => Array
        (
            [id] => 1
            [due_date] => 2011-09-23
            [due_amount] => 10600.00
        )

    [1] => Array
        (
            [id] => 2
            [due_date] => 2011-10-23
            [due_amount] => 10600.00
        )

    [2] => Array
        (
            [id] => 3
            [due_date] => 2011-11-23
            [due_amount] => 10600.00
        )
)

如何将这个数组中的id改为u_id

问候

【问题讨论】:

  • 到目前为止您尝试过什么,这样可以节省我们尝试您已经尝试过的时间的时间?

标签: php arrays


【解决方案1】:
array_walk_recursive($array, 'changeIDkey');

function changeIDkey($item, &$key)
{
    if ($key == 'id') $key = 'u_id';
}

PHP 手册:array_walk_recursive

编辑

由于@salathe 在下面的评论中给出的原因,这将不起作用。正在研究替代方案。

实际答案

function changeIDkey(&$value,$key)
{
    if ($value === "id") $value = "u_id";
}

$new = array();
foreach ($array as $key => $value)
{
    $keys = array_keys($value);
    array_walk($keys,"changeIDkey");
    $new[] = array_combine($keys,array_values($value));
}

var_dump($new); //verify

$array 是您的输入数组。请注意,这仅适用于您当前的数组结构(二维,仅在第二维上更改键)。

循环遍历内部数组,将键中的“id”更改为“u_id”,然后将新键与旧值重新组合。

【讨论】:

  • 注意array_walk() 手册页上的注释,该注释同样适用于array_walk_recursive()只有array 的值可能会被更改;它的结构不能改变,即程序员不能添加、取消设置或重新排序元素。如果回调不遵守此要求,则此函数的行为未定义且不可预测。
  • @salathe:是的,刚刚注意到了。正在研究替代方案。
  • 这太糟糕了,一个简单的array_walk() 和@nobody 的答案的循环体作为回调有什么问题?
【解决方案2】:
foreach( $array as &$element ) {
    $element['u_id'] = $element['id'];
    unset( $element['id'] );
}

【讨论】:

  • 感谢您的回答,它似乎工作正常
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 2021-01-18
  • 2019-05-20
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
相关资源
最近更新 更多