>백엔드 개발 >PHP 문제 >PHP의 2차원 배열에서 중복된 값을 삭제하는 방법

PHP의 2차원 배열에서 중복된 값을 삭제하는 방법

PHPz
PHPz원래의
2023-04-19 09:20:40647검색

PHP에서는 배열을 다뤄야 하는 경우가 많은데, 자주 묻는 질문 중 하나가 2차원 배열에서 중복된 값을 제거하는 방법입니다. 이 문제는 해결하기 어렵지 않습니다. array_map, array_unique, array_filter 등과 같은 PHP에서 제공하는 일부 배열 함수를 사용할 수 있습니다. 다음으로 2차원 배열에서 중복된 값을 삭제하는 방법을 살펴보겠습니다. 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_uniquearray_filter

2차원 배열이란 무엇인가요?

2차원 배열은 배열의 요소도 배열이며 행렬로 표현될 수 있음을 의미합니다. PHP에서는 다음 방법을 사용하여 2차원 배열을 생성할 수 있습니다: 🎜rrreee🎜위 코드에서 $students 배열을 생성합니다. 여기서 각 요소는 를 포함하는 배열이기도 합니다. 이름age는 두 개의 키-값 쌍입니다. 이 배열은 학생 정보의 테이블로 이해될 수 있습니다. 🎜

중복 값 삭제 방법

🎜다음으로 2차원 배열에서 중복 값을 삭제하는 여러 가지 방법을 소개합니다. 🎜

방법 1: foreach 루프 사용

rrreee🎜에서 위의 코드에서는 먼저 빈 $result 배열을 정의한 다음 두 개의 foreach 루프를 사용하여 각 요소 $value에 대해 원래 배열 <code>$arr를 순회합니다. code>에서 $result 배열에 동일한 요소가 있는지 확인하고, 없으면 $result 배열에 추가하세요. 🎜🎜이 방법은 비교적 간단하고 이해하기 쉽지만 효율성이 상대적으로 낮습니다. 특히 데이터가 많은 경우 탐색 시간이 매우 길어집니다. 🎜

방법 2: array_map 및 array_unique 함수 사용

rrreee🎜위 코드에서는 먼저 array_map 함수를 사용하여 원본 배열 $arr 각 요소는 문자열로 직렬화됩니다. 그런 다음 <code>array_unique 함수를 사용하여 직렬화된 문자열을 중복 제거하고, 마지막으로 foreach 루프를 사용하여 이를 일반 배열 요소로 역직렬화합니다. 🎜🎜이 방법은 방법 1보다 약간 더 효율적이지만 직렬화 및 역직렬화 프로세스가 성능에 영향을 미칠 수 있습니다. 🎜

방법 3: array_filter 함수 사용

rrreee🎜위 코드에서는 먼저 array_map 함수를 사용하여 원본 배열 $arr의 각 요소를 필터링합니다. > 모두 문자열로 직렬화된 다음 array_unique 함수를 사용하여 직렬화된 문자열을 중복 제거하고 마지막으로 array_filter 함수를 사용하여 역직렬화 작업을 구현합니다. 🎜🎜처음 두 가지 방법에 비해 이 방법은 코드가 적고 더 효율적입니다. 🎜

요약

🎜PHP에서는 2차원 배열에서 중복된 값을 삭제하는 것이 어렵지 않습니다. array_map, array_unique code>, <code>array_filter 및 기타 구현할 함수입니다. 보다 효율적인 처리 결과를 얻으려면 필요에 따라 다양한 방법을 선택하십시오. 🎜

위 내용은 PHP의 2차원 배열에서 중복된 값을 삭제하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.