연관 배열에서 중복 값 제거
array_unique
가 배열에서 중복 값을 제거할 수 있지만 경우에 따라 처리해야 하는 배열이 상당히 복잡하고 array_unique
에 완전히 맞지 않는 경우가 있습니다. 다음 배열은 중첩 배열에 중복 값이 있는 연관 배열입니다.$arr = [
[
'name' => 'a',
'channels' => [
['id' => 1, 'value' => 111],
['id' => 2, 'value' => 222],
]
], [
'name' => 'b',
'channels' => [
['id' => 3, 'value' => 111], // remove
['id' => 4, 'value' => 333],
]
], [
'name' => 'c',
'channels' => [
['id' => 5, 'value' => 333], // remove
['id' => 6, 'value' => 333], // remove
['id' => 7, 'value' => 666],
['id' => 8, 'value' => 666], // remove
['id' => 9, 'value' => 888],
]
]
];
제거 규칙은 채널에서 중복된 '값'을 필터링하여 다시 표시되면 전체 항목을 제거해야 합니다(위 코드 스니핑에서 '제거'로 표시됨). 원하는 출력은 다음과 같습니다.
$arr = [
[
'name' => 'a',
'channels' => [
['id' => 1, 'value' => 111],
['id' => 2, 'value' => 222],
]
], [
'name' => 'b',
'channels' => [
['id' => 4, 'value' => 333],
]
], [
'name' => 'c',
'channels' => [
['id' => 7, 'value' => 666],
['id' => 9, 'value' => 888],
]
]
];
가장 까다로운 부분은 배열을 반복하면서 동시에 요소를 제거하는 것이 어렵다는 것입니다. 짧은 대답은 루프 배열 동안 요소를 제거하지 마십시오. 동시에 수행하면 많은 예기치 않은 동작이 발생할 수 있습니다. 다음은 간단하고 명확한 해결책입니다.
$unique = [];
foreach ($arr as &$item) {
$newChannel = [];
foreach ($item['channels'] as $key => $channelItem) {
if (in_array($channelItem['value'], $unique)) {
continue;
}
$newChannel []= $channelItem;
$unique[] = $channelItem['value'];
}
$item['channels'] = $newChannel;
}
솔루션에 대한 설명을 볼 수 있습니다here.
Reference
이 문제에 관하여(연관 배열에서 중복 값 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aldora/remove-duplicate-value-from-associate-array-5bo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)