有時會用到不同 condition 去查同一個 table 的情況
merge 多個 results 後又不想要重複的 record

類似下面的樣子

$dbData = [
    [
        'id' => 1,
        'name' => 'Heat',
    ],
    [
        'id' => 2,
        'name' => 'John',
    ],
    [
        'id' => 1,
        'name' => 'Heat',
    ],
    [
        'id' => 2,
        'name' => 'John',
    ]
];

想去重複變成

$dbData = [
    [
        'id' => 1,
        'name' => 'Heat',
    ],
    [
        'id' => 2,
        'name' => 'John',
    ]
];

以前的菜鳥方法
foreach check id 不在新 array 裡後 set value

$uniqueData = array();

foreach ( $dbData as $row )
{
    if( ! isset( $uniqueData[ $row['id'] ] ) )
    {
        $uniqueData[ $row['id'] ] = $row;
    }
}

$uniqueData = array_values($uniqueData);

# uniqueData Gotcha !!

解法

function uniqueData( array $dbData, string $uniqueKey = 'id' ) : array
{
    return array_values(array_column($dbData, null, $uniqueKey));
}

Tags : [ PHP ]