首頁  >  文章  >  後端開發  >  php怎麼刪除二維數組重複值

php怎麼刪除二維數組重複值

PHPz
PHPz原創
2023-04-19 09:20:40574瀏覽

在 PHP 中,我們經常需要處理數組,其中一個常見的問題是如何刪除二維數組中的重複值。這個問題並不難解決,我們可以使用 PHP 提供的一些陣列函數,例如array_maparray_uniquearray_filter 等等。下面,就讓我們來了解如何實作刪除二維數組重複值的方法。

什麼是二維數組?

二維數組是指一個數組中的元素也是一個數組,它可以表示為一個矩陣。在PHP 中,我們可以使用以下方式建立一個二維數組:

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18)
);

上面的程式碼中,我們建立了一個$students 數組,其中每個元素也是一個數組,包含nameage 兩個鍵值對。這個數組可以理解為一個學生資訊的表格。

刪除重複值的方法

接下來,我們介紹若干種刪除二維陣列重複值的方法:

#方法一:使用foreach 迴圈

function remove_duplicate_by_foreach($arr){
    $result = array();//定义一个新数组,用来存放去重后的数据
    foreach($arr as $key => $value){
        $flag = false;
        foreach($result as $val){
            if($value == $val){
                $flag = true;
                break;
            }
        }
        if(!$flag){ //如果数据不重复,则将其添加到新数组中
            array_push($result, $value);
        }
    }
    return $result;
}

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18),
    array('name' => '张三', 'age' => 18)
);
print_r(remove_duplicate_by_foreach($students));

上面的程式碼中,我們先定義了一個空的$result 數組,然後使用兩個foreach 迴圈遍歷原始數組$arr,對於其中的每個元素$value,在$result 陣列中尋找是否存在相同的元素,如果不存在,則將其新增至$result 陣列中。

這種方法比較簡單易懂,但是效率比較低,尤其是當資料較多時,遍歷的時間會變得很長。

方法二:使用array_map 和array_unique 函數

function remove_duplicate_by_array_map($arr){
    $temp = array_map("serialize", $arr);//将数组中的每个元素都序列化
    $result = array_unique($temp);//去重操作
    $new_array = array();
    foreach ($result as $value) {//反序列化操作
        array_push($new_array, unserialize($value));
    }
    return $new_array;
}

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18),
    array('name' => '张三', 'age' => 18)
);
print_r(remove_duplicate_by_array_map($students));

上面的程式碼中,我們先使用array_map 函數將原始陣列$arr 中的每個元素都序列化成字串,然後使用array_unique 函數對序列化後的字串進行去重操作,最後再使用foreach 循環反序列化成正常的陣列元素。

這種方法比起方法一,效率稍高一些,但是序列化和反序列化的過程可能會影響效能。

方法三:使用array_filter 函數

function remove_duplicate_by_array_filter($arr){
    $unique_arr = array_unique(array_map('serialize',$arr));//先将数组序列化再去重
    return array_filter($unique_arr, function($var){//回调函数进行反序列化
        return unserialize($var);
    });
}

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18),
    array('name' => '张三', 'age' => 18)
);
print_r(remove_duplicate_by_array_filter($students));

上面的程式碼中,我們先使用array_map 函數將原始數組$arr 中的每個元素都會序列化成字串,然後使用array_unique 函數對序列化後的字串進行去重操作,最後再使用array_filter 函數實作反序列化操作。

這種方法比起前兩種方法,程式碼量更少,效率也更高。

總結

在PHP 中,刪除二維陣列中的重複值並不難,可以使用array_maparray_unique array_filter 等函數進行實作。根據需要選擇不同的方法,以達到更有效率的處理結果。

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

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