>  기사  >  백엔드 개발  >  PHP 배열에서 중복 요소 제거

PHP 배열에서 중복 요소 제거

不言
不言원래의
2018-04-21 11:57:071659검색

이 글의 내용은 PHP에서 배열의 중복 요소를 삭제하는 내용입니다. 특정 참조 값이 있으므로 이를 공유합니다. 필요한 친구는 이를 참조할 수 있습니다.

배열 요소를 삭제하는 여러 가지 PHP 방법은 다음과 같습니다. 배열 중복이 발생하므로 배열에서 일부 중복 콘텐츠를 삭제하면 어떻게 해야 합니까? 이러한 요소는 고유하게 유지되어야 하므로 순회 쿼리를 사용하여 중복 배열 요소를 삭제하는 방법은 다음과 같습니다.
방법 1. 중복된 배열 인스턴스 완전 삭제----배열의 한 요소 삭제




?

1

2

3

4

5

6

7

8

9

10

11

12

13

14


function array_remove_value(&$arr, $var){
foreach ($arr as $key => $value) {
if (is_array($value)) {
array_remove_value($arr[$key], $var);
} else {
$value = trim($value);
if ($value == $var) {
unset($arr[$key]);
} else {
$arr[$key] = $value;
}
}
}
}


$a是一个数组:




?

1

2

3

4

5

6


count($a); //得到4
unset($a[1]); //删除第二个元素
count($a); //得到3
echo $a[2]; //数组中仅有三个元素,本想得到最后一个元素,但却得到blue,
echo $a[1]; //无值
?>


也就是说在删除数组中的元素后,数组中的元素个数(用count()得到)变了,但数组下标却没有重新排列,还必须用删除数组前的key来操作相应的值。
后来我采用另一种方法,其实根本就不叫"方法",是用php4现成的函数array_splice()




?

1

2

3

4

5

6


count ($a); //得到4
array_splice($a,1,1); //删除第二个元素
count ($a); //得到3
echo $a[2]; //得到yellow
echo $a[1]; //得到blue
?>


方法二、删除数组中重复元素的函数




?

1

2

3

4

5

6

7

8

9


function delmember(&$array, $id)
{
$size = count($array);
for($i = 0; $i <$size - $id - 1; $i ++)
{
$array[$id + $i] = $array[$id + $i + 1];
}
unset($array[$size - 1]);
}


🎜$a는 배열입니다:🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜?🎜🎜🎜🎜🎜🎜1 🎜🎜2🎜🎜3🎜🎜4 🎜🎜5🎜🎜6🎜🎜🎜🎜🎜🎜
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>
🎜🎜🎜🎜🎜🎜🎜🎜즉, 배열의 요소를 삭제한 후, 배열의 요소 개수(count()를 사용하여 얻은)가 변경되었지만 배열 첨자가 재배열되지 않았으며 배열을 삭제하기 전에 키를 사용하여 해당 값을 조작해야 합니다. 🎜나중에 저는 전혀 "메서드"라고 부르지 않는 또 다른 방법을 채택했습니다. 저는 php4에서 이미 만들어진 🎜🎜function array_splice()🎜를 사용했습니다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 🎜6🎜🎜🎜🎜🎜🎜
Array
(
 [a] => green
 [0] => red
 [1] => blue
)
🎜🎜🎜🎜🎜🎜🎜🎜🎜방법 2, 🎜배열의 중복 요소를 삭제하는 함수🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜?🎜🎜 🎜 🎜🎜🎜1🎜 🎜 2🎜🎜3🎜🎜4🎜🎜5🎜🎜6🎜🎜7🎜🎜8🎜🎜9🎜🎜🎜🎜🎜🎜
<?php
$arr = array("a"=>"a1","b"=>&#39;b1&#39;,"c"=>"a2","d"=>"a1");
$arr1 = array_flip($arr);
print_r($arr1);//先反转一次,去掉重复值,输出Array ( [a1] => d [b1] => b [a2] => c )
$arr2 = array_flip($arr);
print_r($arr2);//再反转回来,得到去重后的数组,输出Array ( [a1] => d [b1] => b [a2] => c )
$arr3 = array_unique($arr);
print_r($arr3);//利用php的array_unique函数去重,输出Array ( [a] => a1 [b] => b1 [c] => a2 )
?>
🎜🎜🎜🎜 🎜 🎜🎜

补充小例子:

方法一、php有内置函数array_unique可以用来删除数组中的重复值

  • array_unique -- 移除数组中重复的值

  • array_unique说明

  • array array_unique ( array array )

  • array_unique() 接受 array 作为输入并返回没有重复值的新数组

注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
注: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。就是说,当字符串的表达一样时。
第一个单元将被保留。
例子:array_unique()




?

1

2

3

4

5


<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>


上例将输出:




?

1

2

3

4

5

6


Array
(
 [a] => green
 [0] => red
 [1] => blue
)


方法二、array_flip实现去重效果

另一个方法是使用php的array_flip函数来间接的实现去重效果
array_flip是反转数组键和值的函数,它有个特性就是如果数组中有二个值是一样的,那么反转后会保留最后一个键和值,利用这个特性我们用他来间接的实现数组的去重.




?

1

2

3

4

5

6

7

8

9


<?php
$arr = array("a"=>"a1","b"=>&#39;b1&#39;,"c"=>"a2","d"=>"a1");
$arr1 = array_flip($arr);
print_r($arr1);//先反转一次,去掉重复值,输出Array ( [a1] => d [b1] => b [a2] => c )
$arr2 = array_flip($arr);
print_r($arr2);//再反转回来,得到去重后的数组,输出Array ( [a1] => d [b1] => b [a2] => c )
$arr3 = array_unique($arr);
print_r($arr3);//利用php的array_unique函数去重,输出Array ( [a] => a1 [b] => b1 [c] => a2 )
?>


二种方法不同的是用array_flip得到的是重复元素最后的键和值,用array_unique得到的是二个重复元素第一个键和值。

希望本文所述对大家学习php程序设计有所帮助,解决数组重复元素问题。

相关推荐:

php之比较运算符

위 내용은 PHP 배열에서 중복 요소 제거의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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