php - 通过多个值在多维数组中搜索
问题描述
我有一个数组,我确定其中有一些重复值,我想在这个数组中搜索并找到重复值并返回该数组的键。
让我用一个例子来解释一下,这是我的数组:
[
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 中做到这一点?
解决方案
您可以使用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
推荐阅读
- c# - 一个项目中的 ASP.NET MVC 和 Razor Navigation
- python - 如何在水平列表中显示python函数的输出,以便我们可以重用它?
- laravel - phpunit 测试中的 POST、Response 和 assertJson
- c# - 从 PDF 的特定图层获取文本
- python - 使用 pandas 的 Z 分数计算/标准化
- angular - 运行“ts-node:server”时,在角度 ssr 中的 my-date-picker 中获取“SyntaxError: Unexpected token {”
- mysql - MySQL中的“每个派生表都必须有自己的别名”错误?
- google-bigquery - BigQuery 中的比特币:对公共数据的区块链分析错误的遗漏结果
- android - API 28:BroadcastReceiver onReceive 永远不会执行
- python - 如何在不使用 cv2.cvtColor() 的情况下将 3 个通道图像转换为 1 个通道图像?