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

时间:2018-01-09 17:40:35

标签: php arrays

我有一个名为$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"
]

我做错了什么?

3 个答案:

答案 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_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);