对于糟糕的术语表示歉意,不能想出用于描述此问题的正确词语,因此这个例子应该更有用。
我正在轮询API服务器并返回一个JSON对象,我已经使用json_decode将其转换为PHP对象。
xml格式的返回结果示例如下:http://balifoodsafari.com.au/RGJ4QHE.xml
在此结果中,在booking->字段下有多个字段子集,每个字段都有自己的标签和值。我需要处理这些并将正确的字段值分配给正确的变量,并且我不能保证每次轮询API服务器时字段的顺序都相同。
我的想法,因为我写这个就像是:
foreach($decoded->booking->fields->field as $field){
if($field->label == "Name of Hotel / Accommodation"){
$hotelname = $field->value;
}
elseif(){repeat for 2nd field name}
elseif(){repeat for 3rd field name}
elseif(){repeat for 4th field name}
}
基本上,找到的foreach字段会运行一系列检查以找到匹配的字段标签并匹配变量。有没有更好的方法来执行此操作和/或上面的代码是否有效?
答案 0 :(得分:0)
如果不是分配给变量,而是使用关联数组呢?
$fieldNames = array(
'Name of Hotel / Accommodation' => 'hotelname',
// ...
);
$fields = array();
foreach($decoded->booking->fields->field as $field){
if (isset($fieldNames($field->label)) {
$fields[$fieldNames[$field->label]] = $field->value;
}
}
// $fields will be something like array('hotelname' => '...', ...);
答案 1 :(得分:0)
可能最好使用像这样的开关案例语句
switch($field->label) {
case "fieldLabel1":
//First if cond
break;
case "fieldLabel2":
//2nd if cond
break;
case "fieldLabel3":
//third if cond
break;
case "fieldLabel4":
//fourth cond
break;
default:
//else cond
}
因为编译器在优化switch语句方面优于if语句。在if-else语句的情况下,编译器不知道评估if语句的顺序对您是否重要,并且不能在那里执行任何优化。您可以在if语句中调用方法,从而影响变量。使用switch语句,它知道所有子句可以同时进行评估,并且可以按照最有效的顺序放置它们。