首頁  >  文章  >  後端開發  >  php二維陣列怎麼去掉重複的值

php二維陣列怎麼去掉重複的值

PHPz
PHPz原創
2023-04-26 10:35:083326瀏覽

在PHP中,二維陣列去重是比較常見的問題。當我們需要對一個包含多個維度的陣列進行資料處理時,可能會遇到將某一維度的值進行整合的需求。這時候,如果有重複的數值,就需要將其去重,以避免資料重複造成的問題。本文將介紹如何在PHP中去重二維數組。

方法一:使用array_unique函數

array_unique函數可用來移除陣列中的重複值,並傳回新陣列。它的使用方法非常簡單,只需要將要去重的陣列傳遞給此函數。

例如,對於這樣一個二維數組:

$arr = array(
    array('name' => 'John', 'age' => 20),
    array('name' => 'Mary', 'age' => 25),
    array('name' => 'John', 'age' => 20),
    array('name' => 'Peter', 'age' => 22),
    array('name' => 'Mary', 'age' => 25)
);

我們使用array_unique函數進行去重:

$result = array_unique($arr, SORT_REGULAR);
print_r($result);

輸出結果為:

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [3] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

可以看到,重複的元素已經被除去。

要注意的是,array_unique預設是對陣列的所有維度去重,如果我們只想去重其中一個維度,就需要進行一些特殊處理。

例如,如果我們只想透過name這個維度進行去重,可以使用以下方法:

//遍历二维数组,将name作为键名
foreach($arr as $value){
    $temp_arr[$value['name']] = $value;
}
//去重后,将数组重新按照数字索引重新排序
$temp_arr = array_values($temp_arr);
print_r($temp_arr);

輸出結果為:

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [2] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

可以看到,我們透過將name作為鍵名,實現了只對name這個維度進行去重的效果。

方法二:使用array_reduce函數

另一個常用的去重方法是透過array_reduce函數實作。 array_reduce函數可以對數組中的所有元素進行一次歸約操作,最後傳回一個標量值。我們可以利用此函數來去重二維數組。

例如,對於這樣一個二維數組:

$arr = array(
    array('name' => 'John', 'age' => 20),
    array('name' => 'Mary', 'age' => 25),
    array('name' => 'John', 'age' => 20),
    array('name' => 'Peter', 'age' => 22),
    array('name' => 'Mary', 'age' => 25)
);

我們使用array_reduce函數進行去重:

//定义一个回调函数,用于去重
function filter_duplicate($carry, $item){
    if(!in_array($item, $carry)){
        $carry[] = $item;
    }
    return $carry;
}

$result = array_reduce($arr, 'filter_duplicate', array());
print_r($result);

輸出結果為:

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [3] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

可以看到,重複的元素已經被除去。

要注意的是,array_reduce函數也會對數組所有維度進行去重,如果我們只想去重其中一個維度,就需要進行一些特殊處理,和使用array_unique函數相似。

方法三:使用循環遍歷

還有一個常見的去重方法是使用循環遍歷。此方法較為複雜,但可以充分利用PHP的陣列相關函數,實現靈活的去重處理。我們可以透過在循環中使用in_array函數,或是對每個元素進行雜湊操作,將重複的元素排除。

例如,對於這樣一個二維數組:

$arr = array(
    array('name' => 'John', 'age' => 20),
    array('name' => 'Mary', 'age' => 25),
    array('name' => 'John', 'age' => 20),
    array('name' => 'Peter', 'age' => 22),
    array('name' => 'Mary', 'age' => 25)
);

我們可以使用以下程式碼進行去重:

$new_arr = array();
foreach($arr as $value){
    $hash = md5(serialize($value)); //计算一个哈希值
    if(!isset($new_arr[$hash])){
        $new_arr[$hash] = $value; //新元素加入新数组
    }
}
$new_arr = array_values($new_arr); //将新数组重新按照数字索引重新排序
print_r($new_arr);

輸出結果為:

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [2] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

可以看到,重複的元素已經被除去,並且新數組重新按照數字索引重新排序。

總結:

以上就是三種常見的去重方法,每種方法都有其優劣之處,需要根據實際情況選擇合適的方法。在處理二維數組時,我們應該遵循「簡單且有效率」的原則,盡可能利用PHP提供的陣列相關函數,減少程式碼複雜度和運作效率,提高程式效能。

以上是php二維陣列怎麼去掉重複的值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn