我有两个数组,代码中的一个数组代表标题(简单字符串),另一个数组是电子邮件(也简单字符串)。这两个数组将始终相同,我需要创建它们的键值对。
[
$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;
}
但是不建议使用,它不起作用。感谢您在此问题上的帮助。
答案 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以使用它们。