我有一个XML文件,如下所示:
<services>
<service>
<code>MODULE_1</code>
<name>Regular</name>
<price>14.85</price>
</service>
<service>
<code>MODULE_2</code>
<name>Express</name>
<price>22.50</price>
</service>
</services>
$result
从另一台服务器检索文件。我的代码如下所示:
$methods = array() ;
$xmlQuotes = new SimpleXMLElement($result) ;
foreach($xmlQuotes as $quote) {
$add = 0 ; $f = 0 ;
switch ($quote->code) {
case "MODULE_1" ;
if ((in_array("Regular", $this->allowed_methods))) {
$add = MODULE_1_HANDLING ; $f = 1 ;
$id = "m_1";
$cost = $quote->price;
$description = $quote->name;
}
break;
case "MODULE_2" ;
if ((in_array("Express", $this->allowed_methods))) {
$add = MODULE_2_HANDLING ; $f = 1 ;
$id = "m_2";
$cost = $quote->price;
$description = $quote->name;
}
break;
}
if (($cost > 0) && ($f == 1)) {
$cost = $cost + $add ;
$methods[] = array('id' => "$id",
'title' => "$description",
'cost' => "$cost");
}
}
$this->quotes['methods'] = $methods;
这一直都是好的,直到最后一点 - 当我使用代码时,$methods
数组没有返回正确的$cost
和$description
,因为它匹配{{1而是返回我的第一个模块的价格和描述。它看起来像这样:
$code
我在这里疯了,因为我显然不知道我在做什么,所以任何帮助都会非常感激。
答案 0 :(得分:0)
看起来问题出现在您的第二个((in_array("Express", $this->allowed_methods)))
条件中。如果它返回false并且先前条件if ((in_array("Regular", $this->allowed_methods)))
返回true,那么cost和description将始终只包含它们的第一个值。
答案 1 :(得分:0)
在没有if
- 语句的情况下尝试了您的代码,然后var_dump($methods)
,结果:
Notice: Use of undefined constant MODULE_1_HANDLING - assumed 'MODULE_1_HANDLING' in /in/dTOdQ on line 24
Notice: Use of undefined constant MODULE_2_HANDLING - assumed 'MODULE_2_HANDLING' in /in/dTOdQ on line 33
array(2) {
[0]=>
array(3) {
["id"]=>
string(3) "m_1"
["title"]=>
string(7) "Regular"
["cost"]=>
string(2) "14"
}
[1]=>
array(3) {
["id"]=>
string(3) "m_2"
["title"]=>
string(7) "Express"
["cost"]=>
string(2) "22"
}
在此进行试验:http://3v4l.org/dTOdQ