快速重命名此关联数组数组的键的方法

时间:2014-10-05 05:57:55

标签: php arrays associative-array

我有这个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'];
}

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

由于您正在寻找替换,只需使用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']);
}

答案 2 :(得分:1)

试试这段代码吧:

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