【问题标题】:Best way to get for each element of an array all similar elements from another array in PHP?从PHP中的另一个数组中获取数组的每个元素的所有相似元素的最佳方法?
【发布时间】:2021-07-15 07:51:13
【问题描述】:

所以我在 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;
                }
            }
        }
    }
}

【问题讨论】:

  • 你能展示你目前拥有的代码以及你想要实现的一些例子吗?
  • @NigelRen 我添加了代码,谢谢

标签: php arrays object search optimization


【解决方案1】:
array_intersect($array1,$array2);

这将返回您的预期结果。

【讨论】:

  • 这将显示相似的项虽然
  • 它也不会神奇地作用于对象。
【解决方案2】:

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)

【讨论】:

  • 这也不会对相似名称/电子邮件做任何事情。
猜你喜欢
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2016-09-19
  • 2015-08-15
  • 1970-01-01
相关资源
最近更新 更多