我有一个数组,我确定其中有一些重复的值,我想在此数组中搜索并找到重复的值,然后返回该数组的键。
让我解释一个例子,这是我的数组:
[
0 => [
'name' => 'name0',
'family' => 'family0',
'email' => 'email0@sample.com',
'rate' => 10
],
1 => [
'name' => 'name1',
'family' => 'family1',
'email' => 'email1@sample.com',
'rate' => 4
],
2 => [
'name' => 'name0',
'family' => 'family0',
'email' => 'email0@sample.com',
'rate' => 6
]
];
现在,我想同时通过name
,family
和email
在该数组中进行搜索,并返回父级的键(在此示例中为0和2) 。因为我想创建一个像这样的新数组:
[
0 => [
'name' => 'name0',
'family' => 'family0',
'email' => 'email0@sample.com',
'rate' => [
10,
6
]
],
1 => [
'name' => 'name1',
'family' => 'family1',
'email' => 'email1@sample.com',
'rate' => [
4
]
],
];
如何在PHP中做到这一点?
答案 0 :(得分:4)
您可以使用array-reduce并将3个相似的字段用作键。
定义创建密钥并设置或添加速率的函数:
function combineRate($carry, $item) {
$k = implode('###', array($item['name'], $item['family'], $item['email']));
if (isset($carry[$k]))
$carry[$k]['rate'][] = $item['rate'];
else {
$item['rate'] = [$item['rate']];
$carry[$k] = $item;
}
return $carry;
}
用空数组调用它:
$res = array_values(array_reduce($a, 'combineRate', array()));
实时示例:3v4l