在 PHP 中从 foreach 创建关联数组(硬编码键)



我有一个名为$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_namesecond_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);

最新更新