2017-07-17 3 views
0

Ich arbeite auf Seite, wo mehrere Varianten des gleichen Produkts sind. Ich verwende if-Anweisungen, um zu überprüfen, ob Änderungen angezeigt werden. Wie Sie jedoch sehen können, wiederhole ich mit if-Anweisungen ziemlich genau das Gleiche. Wie kann ich mehrere if-Anweisungen zu einer Eins automatisieren?Automatisierung von IF-Anweisungen

Etwas wie folgt aus:

if($s->??? !=0) { 
    product->??? = $s->???; 
} 

Mein Code:

while ($s = $subProduct->fetch(PDO::FETCH_OBJ)) { 

    $product->variant = $s->variant; 

    if ($s->price != 0) { 
     $product->price = $s->price; 
    } 
    if ($s->battery != 0) { 
     $product->battery = $s->battery; 
    } 
    if ($s->topspeed != 0) { 
     $product->topspeed = $s->topspeed; 
    } 
    if ($s->range != 0) { 
     $product->range = $s->range; 
    } 
} 
+3

Woher kommt $ r? Ich sehe nur $ s-Variable hier initiiert? –

+0

@AbdulRahmanASamad Sorry, das war ein Fehler. Nur $ s sollte da sein. Korrigiert. –

+1

Was genau versuchen Sie zu tun? Das Kopieren von Eigenschaften von einem Objekt auf ein anderes scheint nicht sehr sinnvoll zu sein. Etwas wie '$ product = $ subProduct-> fetchObject (YOUR_PRODUCT_CLASS)' scheint mehr zu brauchen. – jeroen

Antwort

0

ich bin mir sicher, dass es viele Möglichkeiten gibt, aber nur um vielleicht geben Ihnen eine Idee:

$optionalParams = array("range","topspeed","price","battery"); 
foreach($optionalParams as $option) { 
if(isset($s->$option) && $s->$option != 0) 
    $product->$option = $s->$option; 
} 
1

Sie können get_object_vars verwenden.

$vars = get_object_vars($s); 
foreach($vars as $key => $value) { 
    if($s->$key != 0) 
     $product->$key = $s->$key; 
} 
0

Ab PHP 5 können Sie nur verwenden object iteration

nur, indem Sie, dass

foreach ($v as $key => $prop){ 
    if ($prop != 0){ 
     $v->$key = $s->battery; 
    } 
} 

Vollcodebeispiel

<?php 
$v= new \stdClass(); 
$v->name = "john"; 
$v->age = 30; 

foreach ($v as $key => $prop){ 
    if ($prop){ 
     $v->$key = "changed"; 
    } 
} 
var_dump($v); 
exit; 

nun alle $v Eigenschaften wird "geändert"

Den Code als Demo ansehen (https://eval.in/833456)