2016-04-18 3 views
-1
 var_dump($this->externalProjects); 
     var_dump($this->projects); 
     $result = array_diff($this->externalProjects, $this->projects); 
     print_r($result); 

Es ausgibt:php array_diff nicht mit der Sammlung von Wertobjekten arbeiten

array (size=6) // external projects 
    0 => 
    object(CloseCall\ValueObject\Project)[79] 
     private 'name' => string '(A11) Tyre Pyrolysis Plant, Civil, Mech & Elec' (length=46) 
    1 => 
    object(CloseCall\ValueObject\Project)[80] 
     private 'name' => string '(B) - Millerhill New Depot Proposal' (length=35) 
    2 => 
    object(CloseCall\ValueObject\Project)[81] 
     private 'name' => string '(B13) Port of Tyne Wood Pellet Handling Facilities' (length=50) 
    3 => 
    object(CloseCall\ValueObject\Project)[82] 
     private 'name' => string '(C) - Millerhill Proposed New Depot' (length=35) 
    4 => 
    object(CloseCall\ValueObject\Project)[83] 
     private 'name' => string '(S) - EGIP New Depot Proposal' (length=29) 
    5 => 
    object(CloseCall\ValueObject\Project)[85] 
     private 'name' => string '00352 Allerton - Building fabric & structure survey' (length=51) 
array (size=1) //projects 
    0 => 
    object(CloseCall\ValueObject\Project)[15] 
     private 'name' => string '(A11) Tyre Pyrolysis Plant, Civil, Mech & Elec' (length=46) 

// no output for array_diff 
+1

Versuchen Sie 'array_diff_assoc()' – aldrin27

+0

Immer noch kein Glück @ aldrin27 –

+0

Infact, ich möchte nicht die Schlüssel vergleichen - ich dachte, dass das Problem mit Array_diff an erster Stelle sein könnte, aber anscheinend nicht. Ich bin mir nicht sicher, dass array_diff Objekte vergleichen kann. –

Antwort

1

Um Objekte wie diese zu vergleichen, sollten Sie bei array_udiff suchen werden. Der Hauptunterschied zwischen den beiden Funktionen ist, dass array_udiff eine Callback-Funktion als Parameter verwendet, die dann zum Vergleich der Objekte verwendet wird.

Bitte beachten Sie die Docs. http://php.net/manual/en/function.array-udiff.php

Beispiel

int comparison(Array $a, Array $b){ 
    if ($a['id']==$b['id'] && $a['other']==$b['other'] && $a['timestamp']==$b['timestamp']){ 
     return 0 
    }else{ 
     return -1 
    } 
}  

array_udiff($a, $b, 'comparison') 

Diese Funktion prüft, um zu sehen, ob jedes der Array-Schlüsselwerte gleich sind, und wenn ja, kehrt die 0 array_udiff würde dann das Objekt von der Vergleichsanordnungen entfernen.