2017-07-17 151 views
0

我在页面上工作,其中有多个相同产品的变体。我正在使用if语句来检查是否有一些变化需要显示。但是,正如你所看到的,我用if语句重复了几乎相同的事情。我怎样才能将多个if语句自动化为一个?自动执行IF语句

事情是这样的:

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

我的代码:

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

$ r从哪里来?我只在这里看到$ s变量? –

+0

@AbdulRahmanASamad对不起,这是一个错误。只有$ s应该在那里。纠正。 –

+1

你到底在做什么?只是将属性从一个对象复制到另一个对象似乎没有什么意义,使用类似'$ product = $ subProduct-> fetchObject(YOUR_PRODUCT_CLASS)'似乎更符合你的需要。 – jeroen

回答

0

我敢肯定有很多的选择,但只是也许给你一个想法:

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

您可以使用get_object_vars

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

PHP 5起,你可以只使用object iteration

只是这样做

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

完整的代码示例

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

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

现在,所有$v属性 “改变”

将代码看作演示(https://eval.in/833456