我有一个名为$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"
]
我做错了什么?
在此代码中,每次循环时都会覆盖变量
$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
您的方法是每次都覆盖键值。这就是为什么你需要使用2d数组。
你可以这样尝试:
$groups = [];
foreach($arr as $val) {
$groups[] = ['first_key_name' => $val->ID, 'second_key_name' => $val->login];
}
这里发生的事情是,你在循环的每一圈中覆盖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);