重命名多维数组中的键

时间:2015-08-31 19:47:49

标签: php arrays

我想在多维数组中更改键名。

我的阵列:

Array
(
    [0] => Array
        (
            [id] => 1
            [fruit namé] => Banana
        )
    [1] => Array
        (
            [id] => 2
            [fruit namé] => Apple
        )
)

我的功能:

function renameFields($old, $new, $arr) {
    foreach ($arr as $k=>$v) {
        $arr[$k][$new] = $arr[$k][$old];
        unset($arr[$k][$old]);
    }
}

renameFields("fruit namé", "name", $arr);

-

适用于id但不适用于fruit namé等重音符号。

-

修改
我知道将一些特殊字符作为关键字是一种不好的做法,但这些数据来自法国系统......

2 个答案:

答案 0 :(得分:2)

您需要a)通过引用$arr传递给您的函数或b)让renameFields返回更新的数组。

您的代码当前修改了$arr数组的副本(因为这是调用时传递给renameFields的数据),并且永远不会更新外部的数据。 renameFields函数。

所以,你需要做:

function renameFields($old, $new, &$arr) {
    foreach ($arr as $k=>$v) {
        $arr[$k][$new] = $arr[$k][$old];
        unset($arr[$k][$old]);
    }
}

renameFields("fruit name", "name", $arr);

将通过引用传递$arr

或者:

function renameFields($old, $new, $arr) {
    foreach ($arr as $k=>$v) {
        $arr[$k][$new] = $arr[$k][$old];
        unset($arr[$k][$old]);
    }

    return $arr;
}

$arr = renameFields("fruit name", "name", $arr);

将使该函数返回更新的数组,然后您需要更新变量。

P.S。在这两种情况下,您都不需要global $arr;

答案 1 :(得分:2)

在密钥名称中使用空格不是一个好主意。你可以这样做,但这是不好的做法。

以下是我提出的建议:

$my_array = array(
    array(
        'id' => 1,
        'fruit name' => 'Banana'
    ),
    array(
        'id' => 2,
        'fruit name' => 'Apple'
    )
);

function renameFields($old, $new, $arr) {
    $new_a = array();
    foreach ($arr as $a) {
        $new_a[] = array(
            'id' => $a['id'],
            $new => $a[$old] 
        );
    }
    return $new_a;
}

$new_array = renameFields("fruit name", "name", $my_array);

echo "<pre>";
print_r($new_array);
echo "</pre>";

将数组传递给函数而不是使用全局函数是一个好主意。