program tip

Array_merge

radiobox 2020. 8. 4. 07:38
반응형

Array_merge


이 질문에는 이미 답변이 있습니다.

array_merge()연관 배열과 함께 사용하면 원하는 것을 얻을 수 있지만 숫자 키 배열과 함께 사용하면 키가 변경됩니다.

+키가 유지되지만, 그것은 연관 배열 작동하지 않습니다.

이것이 어떻게 작동하는지 이해하지 못합니다. 아무도 설명 할 수 있습니까?


두 배열 모두 숫자로 색인화되므로 첫 번째 배열의 값만 사용됩니다.

+ 연산자는 왼쪽 배열에 추가 된 오른쪽 배열을 반환합니다. 두 배열에 존재하는 키의 경우 왼쪽 배열의 요소가 사용되며 오른쪽 배열의 일치하는 요소는 무시됩니다.

http://php.net/manual/en/language.operators.array.php

array_merge() 약간 다른 동작이 있습니다.

입력 배열에 동일한 문자열 키가있는 경우 해당 키의 이후 값이 이전 키를 덮어 씁니다. 그러나 배열에 숫자 키가 포함 된 경우 이후 값은 원래 값을 덮어 쓰지 않지만 추가됩니다. 숫자 배열이있는 입력 배열의 값은 결과 배열에서 0부터 시작하는 증분 키로 번호가 다시 매겨집니다.

http://php.net/manual/en/function.array-merge.php


이 두 작업은 완전히 다릅니다.

배열 플러스

  1. 배열 더하기 연산은 모든 배열을 연관 배열로 취급합니다.
  2. 플러스 동안 키 충돌이 발생하면 왼쪽 (이전) 값이 유지됩니다
  3. null + array() 치명적인 오류가 발생합니다

array_merge ()

  1. array_merge ()는 index-array 및 assoc-array와 다르게 작동합니다.
  2. 두 매개 변수가 모두 인덱스 배열이면 array_merge ()는 인덱스 배열 값을 연결합니다.
  3. 그렇지 않은 경우 인덱스 배열은 값 배열로 변환 한 다음 assoc 배열로 변환합니다.
  4. 이제 두 개의 assoc 배열을 가져 와서 키 충돌이 발생하면 올바른 값 (마지막)이 유지됩니다.
  5. array_merge(null, array()) array ()를 반환하고 매개 변수 # 1이 배열이 아니라는 경고가 표시됩니다.

명확하게하기 위해 아래 코드를 게시합니다.

function array_plus($a, $b){
    $results = array();
    foreach($a as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
    foreach($b as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
    return $results;
}

//----------------------------------------------------------------

function is_index($a){
    $keys = array_keys($a);
    foreach($keys as $key) {
        $i = intval($key);
        if("$key"!="$i") return false;
    }
    return true;
}

function array_merge($a, $b){
    if(is_index($a)) $a = array_values($a);
    if(is_index($b)) $b = array_values($b);
    $results = array();
    if(is_index($a) and is_index($b)){
        foreach($a as $v) $results[] = $v;
        foreach($b as $v) $results[] = $v;
    }
    else{
        foreach($a as $k=>$v) $results[$k] = $v;
        foreach($b as $k=>$v) $results[$k] = $v;
    }
    return $results;
}

참고 URL : https://stackoverflow.com/questions/7059721/array-merge-versus

반응형