【问题标题】:PHP: Checking two arrays for duplicate valuesPHP:检查两个数组是否有重复值
【发布时间】:2015-05-10 09:34:19
【问题描述】:

我有两个数组,一个包含一个人的名字,另一个包含一个人的姓氏。

$firstname = array ( "John", "Tom", "Ben", "John", "David", "Julie", "David");
$lastname = array ( "Kennedy", "Hyde", "Hughes", "Harper" "Walter", "Weber", "Walter");

一个人的名字和姓氏在两个数组中具有相同的索引(约翰肯尼迪,汤姆海德等)我正在寻找一种方法来查找数组$firstname中的重复值,这将是两个Johns 和两个 Davids,但是如果它们也重复,我需要使用相同的索引检查 $lastname,因此输出将是 David Harper, David Harper

该数组可以包含大约 50 多个不同的姓名和姓氏。

在互联网上找不到任何东西,我的想法也用完了,非常感谢任何帮助。

【问题讨论】:

  • 如果两个名字相同,你想做什么?
  • 没什么,需要跳过。
  • 那么如果你只是删除它们也可以吗?
  • 我想有几个人错过了问题的重点!在我看来,不值得投反对票。

标签: php arrays duplicates


【解决方案1】:

您必须创建第三个数组来处理结果值,即全名。以下示例将返回两个数组,重复数组和不重复的全名数组:

    <?php

$firstname = array ( "John", "Tom", "Ben", "John", "David", "Julie", "David");
$lastname = array ("Kennedy", "Hyde", "Hughes", "Harper", "Walter", "Weber", "Walter");
$fullname = array();
$duplicates = array();

// foreach time we have a first name.
for ($i =0; $i < count($firstname); $i++){
    $fullname_tmp = $firstname[$i]." ".$lastname[$i];
    if (in_array($fullname_tmp, $fullname)){
        if (in_array($fullname_tmp, $duplicates)){
            $duplicates[] = $fullname_tmp;
        }
        else{
            $duplicates[] = $fullname_tmp;
            $duplicates[] = $fullname_tmp;
        }

    }
    else{
        $fullname[] = $fullname_tmp;
    }
}

echo "<pre>\n duplicates \n";

print_r($duplicates);

echo "\n full names \n";

print_r($fullname);

该示例使用in_array 和一个简单的for 循环。

查看此DEMO

【讨论】:

  • 我对这应该做什么有一个基本的想法,但由于某种原因,$duplicates 是空的。
  • @DeividasVysniauskas 演示中不为空!你用它测试代码的值是什么?
【解决方案2】:

简单的array_unique 不能解决您的问题吗?

$firstname = array ( "John", "Tom", "Ben", "John", "David", "Julie", "David");
$lastname = array ( "Kennedy", "Hyde", "Hughes", "Harper", "Walter", "Weber", "Walter");
var_dump(array_unique($firstname));
var_dump(array_unique($lastname));

输出将是

array (size=5)
  0 => string 'John' (length=4)
  1 => string 'Tom' (length=3)
  2 => string 'Ben' (length=3)
  4 => string 'David' (length=5)
  5 => string 'Julie' (length=5)
array (size=6)
  0 => string 'Kennedy' (length=7)
  1 => string 'Hyde' (length=4)
  2 => string 'Hughes' (length=6)
  3 => string 'Harper' (length=6)
  4 => string 'Walter' (length=6)
  5 => string 'Weber' (length=5)

【讨论】:

  • 我认为这个想法是消除具有共同名字和姓氏的元素共享相同的数组索引。
  • 我不需要删除重复项,我需要输出重复项。可以删除所有不共享重复值的姓名和姓氏。
猜你喜欢
  • 2011-03-09
  • 2018-04-23
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多