2011-10-18 4 views
0

두 개의 문자열 배열이 있습니다. 첫 번째 배열은 이전 데이터를 포함하고 두 번째 배열은 이전 배열의 데이터를 덮어 쓰는 새로운 데이터입니다. 이는 두 배열의 인덱스를 일치시키고 다른 모든 셀을 덮어 쓰면 쉽게 수행 할 수 있습니다.복잡한 방식으로 두 배열을 일치

그러나 새 데이터 배열의 인덱스 길이가 이전 인덱스와 다른 경우 문제가 발생합니다. 예를 들어, 새 문자열 하나가 새로운 배열의 중간에 삽입되면, 그 인덱스가 이전 배열의 일치하는 인덱스를 덮어 쓰지 않게하고 싶습니다. 여기

myoldarray("foobar", "blah", "zilch") 
mynewarray("foobar", "blah", "watcha", "zilch") 

내 출력 순서는 중요

finalarray("foobar", "blah", "watcha", "zilch") 

해야한다 ... 내가 달성하기 위해 노력하고있어 설명하기 위해 예이다, 그러나 "제로"는 유지하기 위해 필요 이전과 같은 열쇠.

+0

여기를 따라 오지 마십시오. 이 결과물을 좋아하니? 이전 배열 + 'watcha'? – blockhead

+1

귀하의 모범은 어떻게 될 것입니까? –

+0

또한, myoldarray ("foobar", "blah", "zilch")'및'mynewarray ("foobar", "blah", "watcha")를 사용하면 어떻게됩니까? – Jon

답변

0

당신은 반드시 당신이 차이를 얻을 수 array_compare를 사용하고 동일한 위치에 추가 할 수 있습니다 숫자 배열의 인덱스를 유지해야하는 경우 배열의. 이 색인이 이미있는 경우에는 이전 값 & 색인 1 키를 더 높이 옮깁니다. 그게 니가하고 싶어하는 것이기를 바란다.

$difference = array_diff($newarr,$oldarr); 
foreach($difference as $diff) 
{ 
    foreach($newarr as $key => $value) 
    { 
     if($value == $diff) 
     { 
       if(array_key_exists($key,$oldarr)) 
       { 
        $oldkey = count($oldarr)-1; 
        for($i=count($oldarr);$i>$key;$i--) 
        { 
         $oldarr[$oldkey+1] = $oldarr[$oldkey]; 
        } 
        $oldarr[$key] = $value; 
       } 
       else 
       { 
        $oldarr[$key] = $value; 
       } 

     } 
    } 
} 

행운을 빕니다!

+0

array_diff가 배열을 반환하지 않습니까? 그래서 당신이 $ diff와 $ value를 비교하려고 할 때 그것은 작동하지 않을 것입니까? 또한 array_key_exists에는 두 개의 매개 변수가 필요합니까? –

+0

예, 맞습니다. 바로 저의 머리에서 똑바로 썼습니다. 귀하의 예제 배열과 함께 지금 그것을 테스트하고 작동하게 :) 재미있게 놀아 라! – Anonymous

+0

성공적으로 이전 배열의 오른쪽 인덱스에 "watcha"를 넣었지만 "zilch"가 이전과 같은 참조 가능 키를 여전히 가지고 있기를 기대합니다. 다른 데이터도 동일하기 때문입니다. 이것이 나 자신을 해보려 고 혼란 스러웠던 곳입니다. 순서가 지정된 키를 사용할 수 없기 때문에 유일하게 생성 된 키를 사용하려고했지만 나중에 다시 처음부터 배열을 다시 만들 수 있어야합니다. 이전과 같은 열쇠를 가져라. 다행히 그게 의미가 있습니다 : P –

관련 문제