【问题标题】:PHP Unique Values from Column in Array数组中列的PHP唯一值
【发布时间】:2013-01-11 01:24:09
【问题描述】:

我有一个从我运行的 SQL 查询生成的数组。如下所示:

$arr[$i]['id'] = $id;
$arr[$i]['name'] = $name;
$arr[$i]['email'] = $email;

如何从电子邮件列中获取唯一值?感谢您的帮助。

【问题讨论】:

  • 请向我们展示您搜索过的相关主题。
  • 为什么不在你的 SQL 查询中过滤?
  • ^ 无法过滤 SQL 以了解我在做什么? ^^ 我需要立即解决。对不起

标签: php arrays unique


【解决方案1】:

最好的答案是:

array_unique(array_column($arr, 'email'))

【讨论】:

    【解决方案2】:

    要么使用 MySQL 中的 DISTINCT 方法在您的列中过滤它,要么使用类似的方法

    $uniqueEmails = array();
    foreach($arr as $array)
    {
        if(!in_array($array['email'], $uniqueEmails)
            $uniqueEmails[] = $array['email'];
    }
    

    【讨论】:

    • 对不断增长的数组的迭代 in_array() 调用效率不高。 array_column() 然后array_unique() 更优雅,可能更高效。
    【解决方案3】:

    从 PHP 5.5 开始,还提供了一个名为 array_column() 的新函数。 您可以通过以下方式使用它:

    $allEmails = array_column($arr, 'email');
    $uniqueEmails = array_unique($allEmails);
    

    【讨论】:

    • 你可以只用一行。
    • 这与行数无关。该论坛的目标是帮助人们了解他们所犯的错误并提供帮助他们理解错误的解决方案。
    【解决方案4】:

    从比较特定键的数组中删除重复项

    考虑相同的数组,但第 3 个索引的 id 不同:

    $all_array = Array
    (
        [0] => Array
            (
                [id] => 1
                [value] => 111
            )
    
        [1] => Array
            (
                [id] => 2
                [value] => 222
            )
    
        [2] => Array
            (
                [id] => 3
                [value] => 333
            )
    
        [3] => Array
            (
                [id] => 4
                [value] => 111
            )
    )
    

    现在,1 和 4 都具有相同的值。所以我们想删除它们中的任何一个:

    $unique_arr = array_unique( array_column( $all_array , 'value' ) );
    print_r( array_intersect_key( $all_array, $unique_arr ) );
    

    【讨论】:

    • 这确实起到了保留$all_array 中所有数组列的作用。谢谢!
    【解决方案5】:

    如果您从 SQL 中获取按电子邮件排序的列表,您可以像 Gareth 那样通过循环遍历数组来提高性能,但只需将当前电子邮件地址与最后插入的电子邮件地址进行比较。下面是一个代码示例:

    $uniqueEmails = array();
    $lastemail = '';
    foreach($arr as $array)
    {
        if($array['email'] != $lastemail)
        {
            $uniqueEmails[] = $array['email'];
            $lastemail = $array['email'];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2011-12-05
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多