php - 从PHP中的另一个数组中获取数组的每个元素的所有相似元素的最佳方法?
问题描述
所以我在 PHP 中有两个对象数组(每个对象都包含名称和电子邮件)。我正在寻找的是获取第一个数组的每个元素的最快方法,第二个数组中具有相似名称或电子邮件的所有元素(我正在使用similar_text 函数来实现这一点)。
我现在这样做的方式是使用两个 foreach 函数将第一个数组的每个元素与第二个数组的每个元素进行比较(并对结果进行一些自定义,但这并不重要)。有没有更好的方法来实现这一目标?因为对于大量元素,它可能需要很长时间。
我正在使用 PHP 7.3.12,因此可以使用此版本完成的解决方案表示赞赏。
谢谢!
编辑:这是没有我所说的所有自定义的基本代码:
$data = [];
foreach($project_developers as $pd1) {
$name1 = $pd1->name;
$email1 = strstr($pd1->email, '@', true);
foreach($project_developers as $pd2) {
//Make sure it's not the same developer db entry.
if($pd1->id != $pd2->id) {
$name2 = $pd2->name;
similar_text($name1, $name2, $percent_name);
$email2 = strstr($pd2->email, '@', true);
similar_text($email1, $email2, $percent_email);
//If the similarity is greater than 80% we can save it.
if($percent_name > 80 || $percent_email > 80) {
if(empty($data[$pd2->id][$pd1->id])) {
$data[$pd1->id][$pd2->id] = $pd2;
}
}
}
}
}
解决方案
array_intersect
您可以使用“array_intersect()”。它返回一个数组,其中包含所有参数中存在的 array1 的所有值。请注意,密钥是保留的。
尝试这个,
$a = ['name' => 'Randy', 'email' => 'randy@email.com'];
$b = ['name' => 'Rhoads', 'email' => 'randy@email.com'];
print_r(array_intersect_key($a, $b));
输出 :
Array([email] => randy@email.com)
推荐阅读
- typescript - Storybook 和 AntDesign 组件 - 如何使用 CRA 和 Typescript 进行设置?
- c# - Web API 中的静态方法...正确还是错误?
- c# - DataReader 没有获取值
- laravel - 如何扩展 Laravel Log::info() (不创建新类)?
- c# - 使用和处理带有 MailMessage 的附件
- windows - 单击批处理文件与将文件夹拖到批处理文件上时,循环目录搜索结果的批处理文件会发生变化
- ansible - 如何在ansible中使用字典键一一包含文件?
- c# - Crystal Report 在报表后插入空白页
- php - php构建数组/json对象结构
- python - 安装张量流的问题