我想在多维数组中更改键名。
我的阵列:
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é
等重音符号。
-
修改
我知道将一些特殊字符作为关键字是一种不好的做法,但这些数据来自法国系统......
答案 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>";
将数组传递给函数而不是使用全局函数是一个好主意。