【问题标题】:Fast way to rename the key of this array of associative arrays重命名此关联数组数组的键的快速方法
【发布时间】:2014-10-05 05:57:54
【问题描述】:

我有这个 php 数组;

array(
    (int) 0 => array(
        'KeyName' => array(
            'id' => '1',
            'number' => '11A',
        )
    ),
    (int) 1 => array(
        'KeyName' => array(
            'id' => '2',
            'number' => '22A',
        )
    ),
    (int) 2 => array(
        'KeyName' => array(
            'id' => '16',
            'number' => '001A',
        )
    )
)

我想把'KeyName'改成'NewKeyName',这样新数组就变成了;

array(
    (int) 0 => array(
        'NewKeyName' => array(
            'id' => '1',
            'number' => '11A',
        )
    ),
    (int) 1 => array(
        'NewKeyName' => array(
            'id' => '2',
            'number' => '22A',
        )
    ),
    (int) 2 => array(
        'NewKeyName' => array(
            'id' => '16',
            'number' => '001A',
        )
    )
)

有什么快速的方法来做到这一点?

下面是我试过的代码;

foreach ($array as $key)
{
    $array[$key]['KeyName']=$array[$key]['NewKeyName'];
}

但我遇到了一些非法偏移错误。有没有更好的方法来解决这个问题?

【问题讨论】:

  • +1 搜索堆栈的好问题!

标签: php arrays associative-array


【解决方案1】:

在您的代码中,您获取的是值而不是$key 中的键。你必须尝试$array as $key => $val 而不是$array as $key。同样,一旦进入循环,只需将值复制到新索引并取消设置现有索引。

喜欢

foreach ($array as $key => $val)
{
    $array[$key]['NewKeyName'] = $array[$key]['KeyName'];
    unset($array[$key]['KeyName']);
}

【讨论】:

    【解决方案2】:

    由于您要替换,只需使用 foreach 中的副本:

    基本上你把数组的整个副本而不是使用键:

    foreach ($array as $key) {
                     // ^ this is the copy of that sub array not the key
        $array[$key]['KeyName']=$array[$key]['NewKeyName'];
    }
    

    所以最后如果你想要一个新的:

    $new_array = [];
    foreach($array as $key => $value) {
                     // ^ keys goes here
        $new_array[$key]['NewKeyName'] = $value['KeyName'];
    }
    

    或者因为你不能引用键:

    foreach($array as $key => $value) {
        $array[$key]['NewKeyName'] = $value['KeyName'];
        unset($array[$key]['KeyName']);
    }
    

    【讨论】:

      【解决方案3】:

      试试这个代码,它应该可以工作:

      $array2[] = array();
      for ($i = 0; $i < count($array); $i++)
      {
          $array2[$i]['NewKeyName'] = array_merge($array[$i]['KeyName']);
      }
      $array = $array2;
      

      【讨论】:

        猜你喜欢
        • 2014-11-29
        • 2020-04-14
        • 2011-09-17
        • 2010-09-29
        • 1970-01-01
        • 1970-01-01
        • 2020-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多