반응형
PHP 어레이에서 중복된 값을 검출하는 방법
저는 PHP에서 1차원 어레이로 작업하고 있습니다.중복값의 존재를 검출하고 중복값의 수를 세어 결과를 출력하고 싶습니다.예를 들어 다음과 같은 배열이 지정됩니다.
$array = array('apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi');
인쇄하고 싶다:
apple (2)
orange
pear (2)
banana
kiwi (3)
이 문제에 어떻게 접근해야 하는지 조언해 주시겠어요?
감사해요.
마이크
array_count_values 함수를 사용할 수 있습니다.
$array = array('apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi');
print_r(array_count_values($array));
will 출력
Array
(
[apple] => 2
[orange] => 1
[pear] => 2
etc...
)
if(count(array_unique($array))<count($array))
{
// Array has duplicates
}
else
{
// Array does not have duplicates
}
function array_not_unique( $a = array() )
{
return array_diff_key( $a , array_unique( $a ) );
}
이 배열을 fruits를 키로 하고 발생 횟수를 값으로 하는 연관 배열로 변환해 볼 수 있습니다.약간 장황하지만, 다음과 같습니다.
$array = array('apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi');
$new_array = array();
foreach ($array as $key => $value) {
if(isset($new_array[$value]))
$new_array[$value] += 1;
else
$new_array[$value] = 1;
}
foreach ($new_array as $fruit => $n) {
echo $fruit;
if($n > 1)
echo "($n)";
echo "<br />";
}
사용을 없애다array_unique()
사용여부를 검출한다.count(array_unique())
와 비교하다count($array)
.
그것들을 에 넣습니다.map
(초음파)
map[string -> int] $m
foreach($word in $array)
{
if(!$m.contains($word))
$m[$word] = 0;
$m[$word] += 1;
}
아마도 이와 같은 것(테스트되지 않은 코드이지만 아이디어를 얻을 수 있어야 한다)이 있을까요?
$new = array();
foreach ($array as $value)
{
if (isset($new[$value]))
$new[$value]++;
else
$new[$value] = 1;
}
그러면 값이 키로 지정된 새 어레이가 생성됩니다. 이 값은 원래 어레이에 존재한 횟수입니다.
제가 찾던 답이 없어서 이 함수를 썼어요.이렇게 하면 두 어레이 간의 중복만 포함된 어레이가 생성되고 요소가 중복된 횟수는 인쇄되지 않으므로 질문에 직접 답변할 수 없지만 제 상황에 도움이 되었으면 합니다.
function findDuplicates($array1,$array2)
{
$combined = array_merge($array1,$array2);
$counted = array_count_values($combined);
$dupes = [];
$keys = array_keys($counted);
foreach ($keys as $key)
{
if ($counted[$key] > 1)
{$dupes[] = $key;}
}
sort($dupes);
return $dupes;
}
$array1 = [1,2,3,4,5];
$array2 = [4,5,6,7,8];
$dupes = findDuplicates($array1,$array2);
print_r($dupes);
출력:
Array
(
[0] => 4
[1] => 5
)
$data = ['outer', 'inner', 'sole', 'sole', 'outer', 'outer'];
$result = max(array_count_values($data));
if($result > 1) {
echo 'Duplicate items were found!';
}
이 길이 더 짧고 깨끗한 것 같아요.
function array_not_unique(array $array): array
{
$duplicate_array = array_diff_key( $array , array_unique( $array ) );
$unique_array = [];
foreach ($array as $key => $value) {
if ( in_array($value, $duplicate_array)) {
$duplicate_array[$key] = $value;
}
else {
$unique_array[$key] = $value;
}
}
return ["unique_array" => $unique_array, "duplicate_array" => $duplicate_array];
}
이 함수는 중복 값만 제공합니다.
function array_find_redundant($A){
$U=$N=[];
foreach($A As $k=>$v){
if(in_array($v,$U)){$N[$k]=$v;}else{$U[]=$v;}
}
return $N;
}
$A = ['A','B','B','C','C','C'];
$B = array_find_redundant($A); // [2=>'B',4=>'C',5=>'C']
$count = 0;
$output ='';
$ischeckedvalueArray = array();
for ($i=0; $i < sizeof($array); $i++) {
$eachArrayValue = $array[$i];
if(! in_array($eachArrayValue, $ischeckedvalueArray)) {
for( $j=$i; $j < sizeof($array); $j++) {
if ($array[$j] === $eachArrayValue) {
$count++;
}
}
$ischeckedvalueArray[] = $eachArrayValue;
$output .= $eachArrayValue. " Repated ". $count."<br/>";
$count = 0;
}
}
echo $output;
간단한 방법:
$array = array_values(array_unique($array, SORT_REGULAR));
언급URL : https://stackoverflow.com/questions/1170807/how-to-detect-duplicate-values-in-php-array
반응형
'programing' 카테고리의 다른 글
IntelliJ 정적 Import 완료 (0) | 2022.12.29 |
---|---|
트위터 부트스트랩 vs jQuery UI? (0) | 2022.12.29 |
컴파일된 Java 클래스를 잠그는 방법은 무엇입니까? (0) | 2022.12.29 |
공식 PHP Docker 이미지 접근 방식을 사용하여 php-redis 확장을 설치하는 방법은 무엇입니까? (0) | 2022.12.29 |
java.util을 저장합니다.밀리초의 정밀도로 MySQL DB의 날짜 (0) | 2022.12.29 |