更改多维数组的键

时间:2011-05-21 15:03:13

标签: php

我有一个多维数组,如下所示。如何更改以“id of”开头的键?

Array
(
[0] => Array
    (
        [id of ten] => 1871
        [name] => bob
    )

[1] => Array
    (
        [id of nine hundred thousand] => 12581
        [name] => barney        
    )

)

通常,你会做类似的事情:

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

就我而言,键是动态变化的(我的多维数组中有数千个键,它们是随机的,但它们总是以“id ...”开头)

THX!

3 个答案:

答案 0 :(得分:2)

我想知道这是否是你要找的:

<?php

$array = array(
    array(
        "id of one" => 434,
        "name" => "bob"
    ),
    array(
        "id of two" => 9323,
        "name" => "ted"
    )
);

$c_array = count($array);

for ($i = 0; $i < $c_array; $i++)
{
    foreach ($array[$i] as $key => $value)
    {
        if (substr($key, 0, 5) == 'id of') {
            $array[$i][substr($key, 6)] = $value;
            unset($array[$i][$key]);
        }
    }
}

print_r($array);

?>

注意:包括使用substr()代替strpos()。请参阅下面的Gumbo评论。

https://ideone.com/xBV5L

输出:

Array
(
    [0] => Array
        (
            [name] => bob
            [one] => 434
        )

    [1] => Array
        (
            [name] => ted
            [two] => 9323
        )

)

答案 1 :(得分:2)

这个解决方案很干净。 Array_shift同时做两件事:返回第一个元素(具有id),并从数组中删除它,这样你就可以直接将它分配给'id'的$ new_array

$new_arr=array();
foreach ( $array as $arr)
{
  $new_arr[array_shift($arr)] = $arr;
}

答案 2 :(得分:1)

如果'id of'键始终是数组的第一个元素,则可以使用以下内容:

foreach ($input as &$value)
{
  $value['key'] = reset($value);
  $key = key($value);
  unset($value[$key]);
}

否则,以下内容对我有用:

foreach ($input as &$value)
{
  foreach ($value as $key=>$el) {
    if (substr($key, 0, 5) == 'id of') {
      $value['key'] = $el;
      unset($value[$key]);
    }
  }
}

在这两种情况下,您都可以将$value['key']更改为您想要新密钥的任何内容。