【问题标题】:How to use if...else statement inside a foreach loop?如何在 foreach 循环中使用 if...else 语句?
【发布时间】:2012-09-02 22:45:27
【问题描述】:

好的,我使用这个foreach 循环来解析xml 将结果数据添加到我的数据库中我需要设置$win 值,但它总是在它不应该b时返回3..

$myinfo = simplexml_load_file('http://mysite/results.xml'); 

foreach ($myinfo->Event as $info): 

$cid=$info['EventID']; 
$a=$info->Match['AScoreNT'];
$b=$info->Match['BScoreNT'];

if($a > $b){ 
   $win =1;
} elseif($a < $b){ 
   $win =2;
} else{ 
   $win =3;
}

$sql = "
        INSERT IGNORE INTO `engine4_event_wins`
SET `win_result` = $win,
`comp_id` = $cid;

    ";


    mysql_query($sql);

endforeach; 


<MyFeed>
<Event Sport="AFL" Description="AFL - Finals - Week 1" EventID="651239"    FinalDate="2012-09-07T00:00:00">
<Match TeamA="Hawthorn" TeamB="Collingwood" AScoreNT="135" BScoreNT="97"/>
</Event>
<Event Sport="AFL" Description="AFL - Finals - Week 1" EventID="651240"  FinalDate="2012-09-08T00:00:00">
<Match TeamA="Adelaide Crows" TeamB="Sydney Swans" AScoreNT="42" BScoreNT="71"/>
</Event>

</MyFeed>

【问题讨论】:

  • 您确定这不是拼写错误吗?您缺少;。也尝试使用显式大括号而不是您当前的方式..
  • @Thrustmaster 你是对的,我修复了丢失的;。我认为这与他的问题没有任何关系,否则他不会一直打印3 ;)
  • @xdazz 是的,我今天知道了,并编辑了我的评论 :)
  • var_dump( $info->Match['AScoreNT'], $info->Match['BScoreNT'] );这是否显示了您期望的值?你确定你是在比较整数,而不是字符串?
  • sprintf 没有占位符?那有什么意义呢?只需坚持使用简单的双引号字符串即可进行简单的变量插值。 sprintf 仅在您要对插入的值进行格式化/类型转换时才有用。

标签: php xml loops if-statement foreach


【解决方案1】:

echo $a$b 的值,看看为什么它总是等于 :)

你可以做的另一件事是:

foreach ($myinfo->Event as $info): 

$a=$info->Match['AScoreNT'];
$b=$info->Match['BScoreNT'];

if($a === $b){ 
   $win =3;
elseif($a > $b){ 
   $win =1;
} elseif($a < $b){ 
   $win =2;
} else{ 
   $win =4;
}

echo $win;

endforeach; 

我的猜测是它会打印4...

更新:
我的怀疑是正确的,你是在比较字符串而不是整数,这就是为什么你会得到 equal 结果(双方都不是空字符串,因此,根据 PHP - 它们是相似的......我知道,它不直观,我推荐reading about it!)。

为了修复它,请将您的代码更改为:

if((int)$a > (int)$b){ 
   $win =1;
} elseif((int)$a < (int)$b){ 
   $win =2;
} else{ 
   $win =3;
}

【讨论】:

  • 请使用提要和the full 代码更新您的问题(这将向我们展示您在迭代之前如何读取 XML)。
【解决方案2】:

我刚刚在 if 语句之前添加了 str_replace,现在可以正常工作了。它让我想起了 javascript 中的 parsefloat。非常罕见但解决了这个问题。谢谢大家

$a = str_replace('', '', $a); $b = str_replace('', '', $b);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 2019-12-12
    • 2015-10-28
    • 2021-09-05
    • 2020-03-20
    • 2014-09-15
    • 1970-01-01
    相关资源
    最近更新 更多