2010-07-20 1 views
176

문자열/int 키를 유지하면서 두 개의 배열을 병합 할 수 있습니까 (하나는 문자열 => 값 쌍이고 다른 하나는 int => 값 쌍임)? 그 중 하나도 중복되지 않습니다 (하나는 문자열 만 있고 다른 하나는 정수만 있기 때문입니다).PHP : 색인을 다시 생성하는 대신 키를 유지하면서 두 개의 배열을 병합 하시겠습니까?

// get all id vars by combining the static and dynamic 
$staticIdentifications = array(
Users::userID => "USERID", 
Users::username => "USERNAME" 
); 
// get the dynamic vars, formatted: varID => varName 
$companyVarIdentifications = CompanyVars::getIdentificationVarsFriendly($_SESSION['companyID']); 
// merge the static and dynamic vars (*** BUT KEEP THE INT INDICES ***) 
$idVars = array_merge($staticIdentifications, $companyVarIdentifications); 
+1

. 문자열 키는 실제로 정수의 문자열 표현입니까? – owenmarshall

+0

array_merge가 두 번째 배열을 다시 색인합니다. 예. 어레이를 'array (123 => "VALUE123")'에서'array (0 => "VALUE123")' – Garrett

+0

으로 변경하고 있습니다. 흥미 롭습니다. 나는 PHP 문서가 그 점에 대해 약간 불명확 할 수 있다고 생각한다. 배열의 * all *에 숫자 키가있는 경우에는 어떤 일이 발생할지에 대해 말하지만 그렇지 않은 경우 어떤 일이 발생할지 구체적으로 말하지는 않습니다. –

답변

419

당신은 단순히 '추가'할 수있는 배열 :

>> $a = array(1, 2, 3); 
array (
    0 => 1, 
    1 => 2, 
    2 => 3, 
) 
>> $b = array("a" => 1, "b" => 2, "c" => 3) 
array (
    'a' => 1, 
    'b' => 2, 
    'c' => 3, 
) 
>> $a + $b 
array (
    0 => 1, 
    1 => 2, 
    2 => 3, 
    'a' => 1, 
    'b' => 2, 
    'c' => 3, 
) 
다음

은 (array_merge 정수 키를 다시 색인 배열이기 때문에, 작동하지 않는) 내 현재 코드
+34

어쨌든, 어설트 (배열 (0 => 0,1 => 1) PHP ftw에서 연산자 오버로딩! 덕분에 =) – Garrett

+3

매력처럼 작동했습니다. –

+35

매우 신중해야합니다! + 연산자는 더하기가 아니라 합집합입니다. 키가 겹치지 않으면 모든 것이 좋지만, 그렇다면 ... – GordonM

39

당신이

$replaced = array('1' => 'value1', '4' => 'value4'); 
$replacement = array('4' => 'value2', '6' => 'value3'); 

$merge = $replacement + $replaced;가 출력 수행이 점을 고려 :

Array('1' => 'value1', '4' => 'value2', '6' => 'value3'); 

첫 번째 배열의 합계는 최종 출력에 값을 갖습니다.

수행 $merge = $replaced + $replacement; 출력됩니다 : PHP는 문서 페이지에 따르면, array_merge * * 그렇게 안 : 이상한

Array('1' => 'value1', '4' => 'value4', '6' => 'value3'); 
+0

[[thumbsup]] on this –

+16

요약하면 2 개의 배열을 추가 할 때 첫 번째 값은 두 번째 배열의 값을 재정의합니다. – Dziamid

+0

두 번째가 첫 번째를 무시할 것으로 생각했습니다. :) –

관련 문제