2016-12-12 3 views
0

Ich habe folgenden $ input:vergleichen Objekt-type-Eigenschaft in einer Sammlung von Objekten

elements: array:2 [ 
    0 => Tournament { 
     id: 1 
     amountStaking: Price { 
      value: 2500 
      currency: "EUR" 
     } 
    } 
    1 => Tournament { 
     id: 2 
     amountStaking: Price { 
      value: 2500 
      currency: "EUR" 
     } 
    } 
] 

Was mag ich eine Funktion zu erreichen ist, die ein Objekt oder false in Abhängigkeit von der „Gleichheit“ der wird wieder $amountStaking Eigentum von jedem Tournament. Im vorigen Eingang, sollte es geben die „gemeinsame“ Preis Objekt:

Price { 
    value: 2500 
    currency: "EUR" 
} 

Aber wenn einer der $currency Wert ist „USD“ zum Beispiel, sollte es false zurück.

+0

Ihre Eingabe-Array ist Objekttyp Array oder normale PHP-Array? Was passiert auch, wenn mehr als zwei Elemente im Eingabe-Array vorhanden sind? Auch was hast du probiert? poste es hier, damit wir eine klare Vorstellung bekommen. –

+0

Meine Eingabe ist ein Objekttyp-Array (Doctrine ArrayCollection). Wenn sich mehr als 2 Elemente im Eingabearray befinden, sollte es sich wie explain verhalten. Wenn alle $ mengeStaking gleich sind, sollte das allgemeine Preisobjekt zurückgegeben werden. es ist mindestens eines ist anders, gibt false zurück. Im Moment habe ich keinen Code geschrieben. Ich lese über array_column, array_diff und eine Reihe anderer Funktionen, aber habe keine Ahnung, wie man das alles zusammen – VaN

Antwort

1
$last = null; 
foreach ($elements as $e) { 
    if ($last === null) { 
    $last = e->amountStaking; 
    continue; 
    } 
    if ($last->value != $e->value || $last->currence != $e->currency) { 
    return false; 
    } 
    $last = e->amountStaking; 
} 

return $last; 

Sie gehen durch das Feld, bis ein Eintrag nicht die vorherige entspricht. Sie geben sofort false zurück. Wenn es durchläuft, gebe einfach das letzte Objekt zurück.

Vielleicht sollten Sie

return clone $last; 

zu machen, wird ein neues Objekt, falls Sie es später ändern.


Als "Preis Agnostiker" angefordert:

$last = null; 
foreach ($elements as $e) { 
    if ($last === null) { 
    $last = e->amountStaking; 
    continue; 
    } 
    foreach ($last as $key => $val) { 
    if (!property_exists($e, $key) || $last->$key != $e->$key) { 
     return false; 
    } 
    } 
    $last = e->amountStaking; 
} 

return $last; 
+0

irgendeinen Weg mischt, um es "Preis" agnostisch zu machen? Ich meine, wenn ich morgen eine Eigenschaft innerhalb des Preisobjekts hatte, muss ich die if() Anweisung nicht aktualisieren, um die neue Eigenschaft wiederzugeben. – VaN

+0

Eine Version dafür hinzugefügt – colburton

Verwandte Themen