具有重复值的数组合并功能(保留键)

时间:2019-05-09 14:42:53

标签: php arrays

我有两个数组,代码中的一个数组代表标题(简单字符串),另一个数组是电子邮件(也简单字符串)。这两个数组将始终相同,我需要创建它们的键值对。

[
    $email => $title
]

因此,我的$ email数组如下所示:

Array
(
    [0] => test@test.com
    [1] => test@test.com
    [2] => test@test.com
)

我的$ tile数组如下所示:

Array
(
    [0] => Distributor
    [1] => Internal
    [2] => Agency
)

所以我需要这两个数组是

Array
(
    [test@test.com] => Distributor
    [test@test.com] => Internal
    [test@test.com] => Agency
)

开始时,我使用的是array_combine,但是当出现重复的电子邮件值时,我的代码就坏了。我目前找不到很好的解决方案。我试图从php手册中使用此功能来操纵数组:

function array_combine_($keys, $values)
{
    $result = array();
    foreach ($keys as $i => $k) {
        $result[$k][] = $values[$i];
    }
    array_walk($result, create_function('&$v', '$v = (count($v) == 1)? array_pop($v): $v;'));
    return    $result;
}

但是不建议使用,它不起作用。感谢您在此问题上的帮助。

1 个答案:

答案 0 :(得分:2)

在关联数组中不能有多个相同的键。

您可以将值用作键,将键用作值

$keys = ['test@test.com','test@test.com','test@test.com'];
$values = ['Distributor','Internal','Agency'];
$res = array_combine($values, $keys);

输出

Array
(
 [Distributor] => test@test.com
 [Internal] => test@test.com
 [Agency] => test@test.com
)

或者您可以添加一些使它们唯一的内容,例如索引号,然后再删除该索引号

$keys = ['test@test.com','test@test.com','test@test.com'];
$values = ['Distributor','Internal','Agency'];
$res = [];
array_walk($keys, function($v, $k) use ($values, &$res){
  $res[$v."-".$k] = $values[$k];
});

输出

Array
(
 [test@test.com-0] => Distributor
 [test@test.com-1] => Internal
 [test@test.com-2] => Agency
)

在这里您可以删除-Index以使用它们。