【问题标题】:Comparing entries in an array and removing duplicates (PHP, MySQL)比较数组中的条目并删除重复项(PHP、MySQL)
【发布时间】:2012-08-21 17:16:41
【问题描述】:

我正在尝试在 PHP/MySQL 中完成这个小任务。

我们正在从客户那里收集传真号码(和其他数据),以防我们在我工作的公司的运营中遇到问题(不是编程,别担心)。

基本上我有一个看起来像这样的数组。

   Array
   [1]
      [company] => "Company A"
      [fax] => "031-558330"

   [2]
      [company] => "Company B"
      [fax] => "031558330"

   [3]
      [company] => "Company C"
      [fax] => "12345"

请注意,如果删除破折号 (-),[fax] 实际上是 1 和 2 中的重复项。

我的问题是我需要删除 [2],因为它是 [1] 的副本。基本上,我正在尝试列出唯一的传真号码并打印该唯一传真号码的公司名称。

到目前为止,我已经这样做了:

function format_text($text,$number)
{
    $text = str_ireplace(" ","",$text);
    $text = str_ireplace("-","",$text);
    $text = str_ireplace(",","",$text);
    $text = str_ireplace("/","",$text);
    $text = str_ireplace("+46","0",$text);
    $text = trim($text);

    return $text;
}


$fax_result = mysql_query("SELECT fax,company FROM beredskap GROUP BY company") or die(mysql_error());

for($i = 0; $fax_array[$i] = mysql_fetch_assoc($fax_result); $i++) ;
array_pop($fax_array);

for($i = 0; $i<count($fax_array);$i++)
{ 
    $fn = format_text($fax_array[$i]['fax']);
    if(!empty($fn)) {
    echo trim($fax_array[$i]['company']) .",". $fn ."\n";

    }
}

我不知道我应该如何比较两个子元素(因为来自 SQL 的原始数据可能在它们之间存在差异,但是当去掉破折号和逗号时与其他条目重复),然后删除父键。

我真诚地希望我以正确的方式提出了这个问题。

有人愿意帮忙吗? 谢谢!

【问题讨论】:

  • 有问题有一个数组匹配算法,你也可以通过它删除匹配的元素
  • 感谢 Mayank! eggyal(下)实际上将其“扼杀”在了萌芽状态 - 在它进入 PHP 并成为问题之前,他/她的 SQL 向导。不过感谢您的帮助!

标签: php mysql arrays compare duplicates


【解决方案1】:

你可以在 SQL 中做到这一点:

SELECT   company,
         TRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(fax,
           ' ',   '' ),
           '-',   '' ),
           ',',   '' ),
           '/',   '' ),
           '+46', '0')
         ) AS faxno
FROM     beredskap
GROUP BY faxno

请注意,在针对不同公司的表中出现相同的传真号码时,上述查询将不确定地选择这些公司之一。如果在这种情况下您更愿意选择一家特定公司,请说明如何确定要选择的公司。

另请注意,如果该公司在beredskap 表中有具有不同传真号码的记录,则此分组将导致单个公司的结果集中出现多个条目,而您的原始查询将不确定地仅选择该公司的传真之一数字。如果这不是您想要的行为,请说明如何确定要选择的传真号码。

【讨论】:

  • 非常感谢!我正在尝试这个。如果同一家公司出现两次 - 那很好,因为一家公司可能有 5 个不同的面孔,他们希望我们在紧急情况下传真给他们。我正在尝试这个并报告回来。
  • 你是……你是神吗?这完全符合我的期望。我很羡慕你的逻辑魔法。太感谢了。希望在我的情况下(以及有限的脑力/经验)的其他人会看到您的优雅解决方案。在进入PHP之前修复问题。
猜你喜欢
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 2017-12-31
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多