我有一个如下所示的数组:
$myArray =
[
['email' => 'email1@email.com', 'value' => '123'],
['email' => 'email1@email.com', 'value' => '456'],
['email' => 'email1@email.com', 'value' => '789'],
['email' => 'email2@email2.com', 'value' => '123'],
['email' => 'email2@email2.com', 'value' => '456'],
...
]
根据唯一键(电子邮件)组合值的好方法是什么,这样前一个数组最终会像这样结束:
[
'email@email.com' => ['123', '456'],
'email2@email2.com' => ['123', '456', '789'],
...
]
我可以想到解决方案,但它们看起来效率都很低:(例如,这里有一个:
$resultArray = array();
foreach ($myArray as $info) {
if (!isset($resultArray[$info['email']])) {
$resultArray[$info['email']] = array();
}
array_push($resultArray[$info['email']], $info['value']);
}
由于某种原因,这并不适合我。
问题
有更好的解决方案吗?
- 更新了我的明显错误 - 检查新的(第一个)数组:/ -
答案 0 :(得分:2)
array_push()
的所有检查和使用均可由empty array indexer替换。这大大简化了循环,如下所示:
foreach ($myArray as $item) {
$result[$item['email']][] = $item['value'];
}
这方面的一个例子是here。
答案 1 :(得分:1)
您只需使用foreach
作为
$myArray =
[
['email' => 'email1@email.com', 'value' => '123'],
['email' => 'email1@email.com', 'value' => '456'],
['email' => 'email1@email.com', 'value' => '789'],
['email' => 'email2@email2.com', 'value' => '123'],
['email' => 'email2@email2.com', 'value' => '456'],
];
$result = array();
foreach ($myArray as $key => &$value) {
if(isset($result[$value['email']])){
array_push($result[$value['email']],$value['value']);
}else{
$result[$value['email']] = array($value['value']);
}
}