簡體   English   中英

數組中列的 PHP 唯一值

[英]PHP Unique Values from Column in Array

我有一個從我運行的 SQL 查詢生成的數組。 它看起來像下面這樣:

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

如何從電子郵件列中獲取唯一值? 我很感激你的幫助。

最佳答案是:

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

使用 MySQL 中的 DISTINCT 方法在您的列中過濾它,或者使用類似的方法

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

自 PHP 5.5 起,還提供了一個名為array_column()的新函數。 您可以通過以下方式使用它:

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

從比較特定鍵的數組中刪除重復項

考慮相同的數組,但第三個索引的 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 ) );

如果您從 SQL 獲得按電子郵件排序的列表,您可以通過像 Gareth 那樣循環遍歷數組來提高性能,但只將當前電子郵件地址與最后插入的電子郵件地址進行比較。 下面是一個代碼示例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM