아직없는 경우 배열에 추가
요소가 아직없는 경우에만 배열에 요소를 추가하는 방법은 무엇입니까? 다음이 있습니다.
$a=array();
// organize the array
foreach($array as $k=>$v){
foreach($v as $key=>$value){
if($key=='key'){
$a[]=$value;
}
}
}
print_r($a);
// 출력
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 1
[4] => 2
[5] => 3
[6] => 4
[7] => 5
[8] => 6
)
대신 $ a가 고유 한 값으로 구성되기를 원합니다. (나는 array_unique를 사용하여 원하는 결과를 얻을 수 있다는 것을 알고 있지만 알고 싶습니다.)
in_array 에 대해 각 값을 확인해야합니다 .
$a=array();
// organize the array by cusip
foreach($array as $k=>$v){
foreach($v as $key=>$value){
if(!in_array($value, $a)){
$a[]=$value;
}
}
}
PHP 기능을 사용해야합니다 in_array
( http://php.net/manual/en/function.in-array.php 참조 ).
if (!in_array($value, $array))
{
$array[] = $value;
}
이것은 문서에서 다음과 같이 말합니다 in_array
.
needle이 배열에서 발견되면 TRUE를 반환 하고 그렇지 않으면 FALSE를 반환합니다.
스칼라 값만 있는 것 같기 때문에 PHP의 배열은 오히려 해시 맵이므로 값을 키로 사용하여 중복을 방지하고 $k
키를 연결 하여 원래 값을 얻을 수 있습니다.
$keys = array();
foreach ($array as $k => $v){
if (isset($v['key'])) {
$keys[$value] = $k;
}
}
그런 다음 원래 값을 얻기 위해 반복하면됩니다.
$unique = array();
foreach ($keys as $key) {
$unique[] = $array[$key]['key'];
}
이것은 아마도 가장 분명하고 가장 포괄적 인 접근 방식은 아니지만 O ( n ) 에서와 같이 매우 효율적 입니다.
in_array
다른 사람들이 제안한 것처럼 대신 사용 하는 것이 더 직관적 일 수 있습니다. 그러나 적용되지 않는 O ( n 2 ) ( in_array
is in O ( n )) 의 알고리즘으로 끝날 것입니다 . 배열의 모든 값을 푸시하고 사용 array_unique
하는 것보다 in_array
( array_unique
O ( n · log n ) 의 값을 정렬 한 다음 연속적인 중복을 제거 하는 것보다 낫습니다 ).
if (!in_array(...))
array_push(..)
작성하기 쉽지만 가장 효과적인 것은 아닙니다.
$array = array_unique(array_merge($array, $array_to_append));
이것은 아마도 더 빠를 것입니다.
$array = array_merge($array, array_diff($array_to_append, $array));
if (!in_array($value, $a))
$a[]=$value;
키 순서에 신경 쓰지 않는다면 다음을 수행 할 수 있습니다.
$array = YOUR_ARRAY
$unique = array();
foreach ($array as $a) {
$unique[$a] = $a;
}
값 대신 키로 추가해보세요.
항목 추가
function addEntry($entry) {
$this->entries[$entry] = true;
}
모든 항목 가져 오기
function getEntries() {
return array_keys($this->enties);
}
원하는 결과를 달성하는 방법이 많고 많은 사람들 !in_array()
이 답변을 제공 했으며 OP는 이미 사용에 대해 언급 했기 때문에 array_unique
몇 가지 대안을 제공하고 싶습니다.
사용 array_diff
(PHP> = 4.0.1 || 5)이 존재하지 않는 경우에만 새로운 배열 값을 필터링 할 수 있습니다. 또는 키와 값을 array_diff_assoc
. http://php.net/manual/en/function.array-diff.php
$currentValues = array(1, 2);
$newValues = array(1, 3, 1, 4, 2);
var_dump(array_diff($newValues, $currentValues));
결과:
Array
(
[1] => 3
[3] => 4
)
또 다른 방법은를 사용 array_flip
하여 값을 키로 할당하고를 사용하여 비교 isset
하는 것입니다. 이는 in_array
대규모 데이터 세트 보다 훨씬 빠르게 수행됩니다 . 다시 이것은 현재 값에 아직 존재하지 않는 새 값만 필터링합니다.
$currentValues = [1, 2];
$newValues = [1, 3, 1, 4, 2];
$a = array();
$checkValues = array_flip($currentValues);
foreach ($newValues as $v) {
if (!isset($checkValues[$v])) {
$a[] = $v;
}
}
결과:
Array
(
[0] => 3
[1] => 4
)
두 방법 중 하나를 사용 array_merge
하여 고유 한 새 값을 현재 값에 추가 할 수 있습니다 .
결과:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
"in_array"를 사용해 볼 수 있습니다.
function insert_value($value, &$_arr) {
if (!in_array($value, $_arr)) {
$_arr[] = $value;
}
}
( 일부 코딩 표준이 권장하는 것처럼 명시 적 블록 을 작성하는 대신) 코드에 속기 를 사용하는 것이 괜찮다면 다음 한 줄로 Marius Schulz의 대답 을 더욱 단순화 할 수 있습니다 .if
in_array ($value, $array) || $array [] = $value;
촬영 검보의 아이디어를 코드 작업을 만들기 :
$array = array('111111','222222','3333333','4444','5555',
'AAAAAA', 'BBBBBB', 'CCC', 'DDDDDDD', 'EEEEEEEE', 'FFFFFF', 'GGG',
'AAAAAA', 'BBBBBB', 'CCC', 'DDDDDDD', 'EEEEEEEE', 'FFFFFF', 'GGG',
'222222',
'666666', '777777', 'HHHH');
print_r($array);
$keys= array();
foreach ($array as $k => $v){
if (isset($v['value'])) {
$keys[$v] = $k;
}
}
$unique = array();
foreach ($keys as $key) {
$unique[] = $array[$key];
}
print "<br><br>";
print_r($unique);
다음을 제공합니다.
Array
(
[0] => 111111
[1] => 222222
[2] => 3333333
[3] => 4444
[4] => 5555
[5] => AAAAAA
[6] => BBBBBB
[7] => CCC
[8] => DDDDDDD
[9] => EEEEEEEE
[10] => FFFFFF
[11] => GGG
[12] => AAAAAA
[13] => BBBBBB
[14] => CCC
[15] => DDDDDDD
[16] => EEEEEEEE
[17] => FFFFFF
[18] => GGG
[19] => 222222
[20] => 666666
[21] => 777777
[22] => HHHH
)
Array
(
[0] => 111111
[1] => 222222
[2] => 3333333
[3] => 4444
[4] => 5555
[5] => AAAAAA
[6] => BBBBBB
[7] => CCC
[8] => DDDDDDD
[9] => EEEEEEEE
[10] => FFFFFF
[11] => GGG
[12] => 666666
[13] => 777777
[14] => HHHH
)
더 좋고 더 간단한 기본 방법 :
$array = $array_1 + $array_2;
참조 : 배열 연산자 : 공용체.
$input = Array(1,2,3,1,2,3,4,5,6);
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
참고 URL : https://stackoverflow.com/questions/6083567/add-to-array-if-it-isnt-there-already
'Program Tip' 카테고리의 다른 글
ORM 및 Embedded SQL없이 Java 웹 애플리케이션을 디자인하려면 어떻게해야합니까? (0) | 2020.12.09 |
---|---|
스크롤 방향을 감지하는 방법 (0) | 2020.12.09 |
5 분마다 URL 주소를 실행하는 CRON 명령 (0) | 2020.12.09 |
C ++ 14에 도입 된 어떤 변경으로 인해 C ++ 11로 작성된 프로그램이 잠재적으로 중단 될 수 있습니까? (0) | 2020.12.09 |
구조체에서 기본값 초기화 (0) | 2020.12.09 |