2013-08-21 2 views
0

나는 비슷한 질문을 여기에서받습니다. https://stackoverflow.com/questions/18343559/compare-two-associative-arrays?noredirect=1#comment26938095_18343559 또는 여기 compare two associative array and display the difference 그러나 이것은 많은 전문가가 저에게 제안한 것처럼 쉽게 수정할 수 있도록 수정되었습니다. 제발 부정적인. 어떤 실수라도하면 나에게 말해줘. 나는 그걸 고치려고 노력할거야, 제발? 여기 배열 사이에 차이가 있습니다

내가 PHP 5.3을 사용하고있는 질문 ... 이며,이 배열은

function diff($new,$old) 
{ 
    $del=array_diff_assoc($old,$new); 
    $add=array_diff_assoc($new,$old); 
    return $diff=array("old"=>$del, "news"=>$add); 
} 

배열은 다음과 같습니다 다음 함수를 생성 PDO MySQL의 쿼리에서 여러 과정을 통과하고, 사용 후 제공 ...

$aa= Array 
(
    [old] => Array 
    (

        [cod] => 
        [gender] => m 
        [title] => 
    ) 
    [news] => Array 
    (
        [cod] => 
        [gender] => f 
        [title] => Mr 
        [wl] => 255 
        [heigh] => 
    ) 
) 

나는 ([ '뉴스'] $의 AA [ '오래된'], $ 단)

$는 = array_merge_recursive 결합하여 다음과 같은 코드를 시도했다; 무엇을해야하는 경우입니다

...

Array 
(
    [gender] => Array 
    (
     [gender] => m 
     [gender] => f   
    ) 
    [title] => Array 
    (
     [title] => 
     [title] => Mr   
    ) 
    [gender] => Array 
    (
     [gender] => m 
     [gender] => f   
    ) 
    [wl] => Array 
    (
     [wl] => 
     [wl] => 255   
    ) 
) 

(이것은 내가 정확히 원하는 결과입니다) .. 다음과 같은 배열을 생산하지만 내가 포함 원하지 않는 데이터가 보인다 모든 키는 [old] 배열에 존재하며 값이있는 [news] 배열의 키 이탈이 표시되면 [NEW] 배열에 같은 키가있는 값이 표시됩니다. 그러나 [news] 배열에 키가있는 경우 [old] 배열에 상응하는 키가 없으며 아무 값도 표시하지 않습니다.

어떤 생각, 내가 감사합니다 .... 난 그냥 당신이 논리적 오류를 만드는 방법 ...

+0

key가 old에 있고 값이 new 인 경우 이전 값 또는 새 값 또는 둘 다 표시하겠습니까? – coderkane

+0

두 가지를 모두 보여주고 싶습니다. 비교를 위해 사용할 수 있습니다 ... 오래된 것은 blabla이고 새로운 것은 blaba입니다 ... –

답변

1

일부 스택. 키 - 값 쌍으로 배열에서, 동일한 키에 대한 두 개의 서로 다른 값이 존재하지 않을 수있다 : 상기에서 얻어진 배열

[gender] => Array 
    (
     [gender] => m 
     [gender] => f 
    ) 

, gender 회 반복된다. $array['gender']['gender']은 무엇을 반환할까요?

[gender] => Array 
    (
     m, 
     f 
    ) 

당신은 단지 두 배열을 반복하고 해당 값을 추가 할 수 있습니다 : 당신을 가정

대신 배열을합니다. 여기에 빈 값을 가정 한 예는 null 수있다 :

Array 
(
    [gender] => Array 
    (
     m, f   
    ) 
    [title] => Array 
    (
     null, Mr   
    ) 
    [gender] => Array 
    (
     m, f   
    ) 
    [wl] => Array 
    (
     null, 255   
    ) 
) 

당신의 결과 배열에 가장 가까운 가능한 일 :

$final = array(); // final array 
$old; 
$new; 

foreach ($old as $k => $v) { 
    $final[$k] = array($v, null); 
} 

foreach ($new as $k => $v) { 
    if (array_key_exists($k, $final) { 
     $final[$k][1] = $v; 
    } else { 
     $final[$k] = array(null, $v); 
    } 
} 

위의 코드의 라인을 따라 뭔가를 인쇄합니다.

+0

저는이 배열을 $ final = array(); // 최종 배열 $ old = $ result [ 'old']; $ new = $ result [ 'new']; 나 맞아? –

+0

@ Mr.Jefffrey 도와 주셔서 감사하고 다른 방향으로 생각해 주셔서 감사합니다. 귀하의 방향은 나를 위해 작동하며 답변으로 받아들입니다. 다시 한번 감사합니다. –

+0

@ MR.Test, 네, 맞습니다. – Shoe

관련 문제