1

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

$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>
4

2 回答 2

0

echo$aand的值,$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 - 它们是相似的......我知道,这不直观,我推荐阅读它!)。

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

if((int)$a > (int)$b){ 
   $win =1;
} elseif((int)$a < (int)$b){ 
   $win =2;
} else{ 
   $win =3;
}
于 2012-09-10T04:43:16.147 回答
0

我刚刚在 if 语句之前添加了 str_replace 并且现在工作完美..这让我想起了 javascript 中的 parsefloat .. 非常罕见但解决了这个问题.. 谢谢大家

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

于 2012-09-10T06:41:19.757 回答