我有一个名为$arr
的数组,其中包含有关用户的一些信息。使用$arr
我想创建一个带有特定键的新关联数组。这就是我到目前为止所得到的:
$groups = [];
foreach($arr as $val) {
$groups['first_key_name'] = $val->ID;
$groups['second_key_name'] = $val->login;
}
我想要实现的是一个具有以下格式的新数组:
'first_key_name' => $val->ID
'second_key_name' => $val->login
'first_key_name' => $val->ID
'second_key_name' => $val->login
我当前的方法存在的问题是当我var_dump($groups)
时我只获得一个空值的键,尽管该数组应该包含至少10个条目。
var_dump($groups)
的输出:
array:1 [▼
"first_key_name" => "4"
]
我做错了什么?
答案 0 :(得分:4)
在此代码中每次循环时都会覆盖变量
$groups = [];
foreach($arr as $val) {
$groups['first_key_name'] = $val->ID;
$groups['second_key_name'] = $val->login;
}
所以改为
$groups = [];
foreach($arr as $val) {
groups[] = [
'first_key_name' => $val->ID
'second_key_name' => $val->login
];
}
这将创建类似这样的东西
[0]
[
'first_key_name' = 1,
'second_key_name' = 99
]
[1]
[
'first_key_name' = 2,
'second_key_name' = 199
]
etc
答案 1 :(得分:1)
您接近每次都会覆盖键值。这就是你需要使用二维数组的原因。
您可以尝试这样:
{{1}}
答案 2 :(得分:0)
这里发生了什么,是你在循环的每个回合中覆盖first_key_name
和second_key_name
。但是你想得到一个包含新key=>value
对的数组。
要实现这一点,您必须将新项目添加到名为$groups
的数组中,如下所示:
$groups = [];
foreach ($arr as $val) {
$groups[] = [
'first_key_name' => $val->ID,
'second_key_name' => $val->login
];
}
您也可以使用array_map
:
$groups = array_map(function ($val) {
return [
'first_key_name' => $val->ID,
'second_key_name' => $val->login,
];
}, $arr);