2012-10-07 3 views
0

다음과 같은 배열을 가지고 있으며, 조합 연산자에 대한 실험을하고 있습니다.PHP 배열 조합 + 설명

$a = array(1,2,3,6); 

$b = array(1, 2, 3, 4, 5); 

$c = $b + $a; 

$의 C는 달러

1,2,3,4,5는 따라서 내가 배열 $ b는 배열에 대해 확인한다고 가정 할 것으로 보인다. 6은 $ b에 존재하지 않으므로 추가하지 않습니다.

이제 $ c = $ a + $ b로 전환하면 (1,2,3,6) 만 예상됩니다.

그러나 실제 출력은 (1,2,3,6,5)입니다.

누구든지 설명 할 수 있습니까?

+1

문제를 해결하는 데별로 도움이되지 않지만 http://www.youtube.com/watch?v=kXEgk1Hdze0을 제공해야합니다. –

답변

2

+ 연산자가 array과 어떻게 작동하는지 오해한다고 생각합니다. +array 사용하는 경우 는 기본적으로 예를 들어 keys하지 values

하여이 개 배열을 병합합니다. $c이 예상 한 것보다 다른 결과를 얻는 이유를 설명하겠습니다.

# $a = array(1,2,3,6); 
$a = array(
    0 => 1, 
    1 => 2, 
    2 => 3, 
    3 => 6 
); 
# $b = array(1, 2, 3, 4, 5); 
$b = array(
    0 => 1, 
    1 => 2, 
    2 => 3, 
    3 => 4, 
    4 => 5 
); 

// the + operator simply do this 
$c[0] = $a[0] + $b[0]; // yield 1 
... 
... 
$c[3] = $a[3] + $b[3]; // yield 6 

$c; // yield array(1,2,3,6,5) 
+0

위 코드가 다음 출력을 제공하므로 @Rezigned에 동의하지 않습니다. $ c [0] = $ a [0] + $ b [0]; // yield 2 $ c [3] = $ a [3] + $ b [3]; // yield 10 이는 간단히 말해서 –

1

+은 가장 왼쪽의 변수를 사용하고 먼저 모든 값을 사용합니다. 모든 값이 소진되었지만 왼쪽 항목의 항목 수가 오른쪽 항목보다 적 으면 나머지 항목을 오른쪽 항목으로 채 웁니다. $boo의 길이보다 큰 $foo 때문에 먼저

$foo = array("foo"); 
$boo = array(true, "bar"); 

$foobar = $foo + $boo; 

, $foobar$foobar$foo 중단 $boo의 값으로 채워집니다, 다음 $foo에, 그러나 어떤로 가득 차있다. 첫 번째 값은 이미 $foo에 의해 사용 되었기 때문에 무시되지만 두 번째 값은 병합되지 않았습니다.

이 개념은 배열의 키가 정의 된 경우에도 적용됩니다 (예 : $ arr [ 'location'] 대신 $ arr []). 오른쪽의 키는 왼쪽을 덮어 쓰지 않습니다.

1

배열을 추가하려면 +을 사용하십시오. 프로세스는 값이 아닌 키로 검사됩니다. array_merge에서 다른

, 당신은 +를 사용하는 경우, 두 번째 배열 의 값은 같은 키를 사용하여 첫 번째 배열의 값을 덮어 쓰지 않습니다.

$b + $a의 경우 $b의 값을 덮어 쓰지 않으므로 결과는 여전히 array(1, 2, 3, 4, 5)이됩니다.

$a + $b의 경우 1,2,3,6이 예약되고 추가 값 6이 추가되므로 결과는 array(1,2,3,6,5)이됩니다.

0

가장 쉬운 방법은 b를 $ C = $ A + $을 설명합니다.

$ C를는 "키 값 쌍"(첫 번째 피연산자) $ A 걸린다.

경우 (두 번째 피연산자) $ B를 가지고 더 "키 값 쌍"보다 $ 다음에 $ B 과량 추가 ..

$ 인 c 배열의 끝.

기타 $ c$ a과 같습니다.

$a = 
    0 => 2, 
    1 => 5, 
    2 => 8, 

$b = 
    0 => 9, 
    1 => 2, 
    2 => 1, 
    3 => 5, 
    4 => 6, 

$c = 
    0 => 2, 
    1 => 5, 
    2 => 8, 
    3 => 5, //From $b 
    4 => 6, //From $b