2013-09-23 9 views
6

Ich habe ein Array mit mehreren Objekten (sagen wir 3 Objekte), jedes mit 3 "Key-Value" -Paare.Replace Object in einem Array in PHP

$PredefinedResult ist so etwas wie dieses:

[ 
    { 
     "EffectiveStatusId":0, 
     "EffectiveStatus":"abc", 
     "RecordCount":0 
    }, 
    { 
     "EffectiveStatusId":0, 
     "EffectiveStatus":"def", 
     "RecordCount":0 
    }, 
    { 
     "EffectiveStatusId":0, 
     "EffectiveStatus":"ghi", 
     "RecordCount":0 
    } 
] 

Ich habe ein anderes Array von Objekten $MainResult mit Werten wie dem Namen:

[ 
    { 
     "EffectiveStatusId":1, 
     "EffectiveStatus":"abc", 
     "RecordCount":7 
    }, 
    { 
     "EffectiveStatusId":6, 
     "EffectiveStatus":"def", 
     "RecordCount":91 
    } 
] 

Erwartetes Ergebnis:

Ich möchte das ersetzen ähnliche Objekte innerhalb $PredefinedResult mit den Objekten von $MainResult und wollen wie dies zur Folge haben:

[ 
    { 
     "EffectiveStatusId":1, 
     "EffectiveStatus":"abc", 
     "RecordCount":7 
    }, 
    { 
     "EffectiveStatusId":6, 
     "EffectiveStatus":"def", 
     "RecordCount":91 
    }, 
    { 
     "EffectiveStatusId":0, 
     "EffectiveStatus":"ghi", 
     "RecordCount":0 
    } 
] 

Was ich versucht:

Ich habe versucht, mit diesem Code aber es gibt mir nicht das gewünschte Ergebnis.

$FinalResult = array_replace($PredefineResult,$MainResult); 

Kann mir jemand helfen, wie ich das Erwartete Ergebnis wie oben erwähnt bekomme?

+0

Das JSON ist. Entschlüsseln Sie es eigentlich schon? –

+0

@AmalMurali: Nein, ich habe es gerade so formatiert, dass jeder das Ergebnis sehen kann, was ich will. Eigentlich ist es ein Array von Objekten. –

Antwort

2

Es gibt keine "eingebaute" Funktion dafür. Sie müssen jedes manuell wiederholen und vergleichen. array_map scheint wie eine OK Wahl hier:

$PredefinedResult = array_map(function($a) use($MainResult){ 
    foreach($MainResult as $data){ 
     if($a->EffectiveStatus === $data->EffectiveStatus){ 
      return $data; 
     } 
    } 
    return $a; 
}, $PredefinedResult); 

DEMO: http://codepad.viper-7.com/OHBQK8

+0

danke für die Wiederholung es funktioniert ...... –

+0

Froh kann ich helfen :) –

+0

Demo nicht mehr zugänglich. –

2

Iterieren durch das Array und manuell vergleichen Sie die Werte wie folgt.

+0

Ich glaube nicht, dass dies Arbeit sein wird. Können Sie mir erklären, wie 'array_unique()' nur Objekte mit 'RecordCount! = 0' selektiert? Siehe das Ergebnis Ich möchte, dass das Objekt mit 'RecordCount == 0' durch' RecordCount! = 0' ersetzt werden soll. –

+1

Scheint, dass Ihr Schlüssel für jedes Array 'EffectiveStatus' ist. Dann musst du mit foreach() gehen; Lassen Sie mich meine Antwort entsprechend aktualisieren. – Jeyasithar

+0

Ich habe meine Antwort bearbeitet. Hoffe, das funktioniert. – Jeyasithar