2012-07-25 1 views
2

그것이 무엇 array_merge을하고 배열 배열의 키를 위해 중요합니까 즉 것 우선 아래의 두 번째 배열의 키 첫 번째 배열의 키 :PHP 키 위해 array_merge

array1 = array('username' => 'abc', 'level' => 'admin', 'status' => 'active'); 
array2 = array('level' => 'root', 'status' => 'active', 'username' => 'bcd'); 

? 또는 두 배열에서 키의 순서가 같아야합니까?

+0

당신은 그것을 시도 간단한에 의해 자신에게 5 분을 구원받은 수 –

답변

2

manual 상태이 질문에 대한 답 : 하나의 값이 이전의 끝에 추가되도록

함께 하나 개 이상의 배열의 요소를 병합합니다. 결과 배열 을 반환합니다.

입력 배열의 문자열 키가 같은 경우 해당 키의 값인 은 이전 값을 덮어 씁니다. 그러나 배열 에 숫자 키가 포함 된 경우 나중 값은 원래 값을 덮어 쓰지 않지만 추가됩니다.

예, 두 번째 배열에 동일한 키가 포함되어 있으면 두 번째 배열의 키가 첫 번째 배열의 키를 덮어 씁니다.

$array1 = array('username' => 'abc', 'level' => 'admin', 'status' => 'active'); 
$array2 = array('level' => 'root', 'status' => 'active', 'username' => 'bcd'); 

$new = array_merge($array1, $array2); 

print_r($new); 

출력 :

Array 
(
    [username] => bcd 
    [level] => root 
    [status] => active 
) 

그래서 두 번째 배열의 키는 첫 번째에서 같은 키를 덮어 것을 볼 수 있습니다; 각 배열의 키 순서는 중요하지 않습니다.

0

여기 템플릿 배열을 사용하여 출력 순서를 정의 할 수있는 대체 솔루션입니다. 누락 된 입력란은 null 또는 지정된대로 채워집니다. 이 예에서 firstlast 필드는 ---으로 채워집니다.

숫자 키에 대한 이전 대답에서 강조 표시된 텍스트를 기록해 두십시오.

function array_merge_template($array1, $array2, $template, $fill=null) { 
    $_template = array_fill_keys($template, $fill); 
    return array_intersect_key (array_replace ($_template, array_merge($array1, $array2)) , $_template); 
} 

입력 :

$array1 = ['username' =>'abc', 'level' =>'admin', 'status' =>'active', 'foo'=>'x']; 
$array2 = ['level' =>'root', 'status' =>'active', 'username' =>'bcd', 'bar'=>'y']; 
$template = ['first','level','foo','username','bar','status','last']; 

출력 :

/* array_merge($array1,$array2) */ 
[ 
    "username" => "bcd", 
    "level" => "root", 
    "status" => "active", 
    "foo"  => "x", 
    "bar"  => "y" 
] 

/* array_merge_template($array1,$array2,$template,'---') */ 
[ 
    "first" => "---", 
    "level" => "root", 
    "foo"  => "x", 
    "username" => "bcd", 
    "bar"  => "y", 
    "status" => "active", 
    "last"  => "---" 
]