SimpleXML对象数组只返回PHP中的第一个值 问题摘要
为什么SimpleXML对象数组只返回第一个值,而不是所有数组元素SimpleXML对象数组只返回PHP中的第一个值 问题摘要,php,simplexml,Php,Simplexml,为什么SimpleXML对象数组只返回第一个值,而不是所有数组元素 问题解释 XML结构(简化) 对于$givenState='California'和$givenState='Nevada',var\u dump($states->asXML())给出: <state> <name>California</name> <cities> <city> <name>Lo
问题解释 XML结构(简化) 对于
$givenState='California'
和$givenState='Nevada'
,var\u dump($states->asXML())
给出:
<state>
<name>California</name>
<cities>
<city>
<name>LosAngeles</name>
</city>
<city>
<name>SanFrancisco</name>
</city>
</cities>
</state>
<state>
<name>California</name>
<cities>
<city>
<name>LosAngeles</name>
</city>
<city>
<name>SanFrancisco</name>
</city>
</cities>
</state>
<state>
<name>Nevada</name>
<cities>
<city>
<name>LasVegas</name>
</city>
</cities>
</state>
和var\u dump($states[1]->asXML())
给出:
<state>
<name>California</name>
<cities>
<city>
<name>LosAngeles</name>
</city>
<city>
<name>SanFrancisco</name>
</city>
</cities>
</state>
<state>
<name>California</name>
<cities>
<city>
<name>LosAngeles</name>
</city>
<city>
<name>SanFrancisco</name>
</city>
</cities>
</state>
<state>
<name>Nevada</name>
<cities>
<city>
<name>LasVegas</name>
</city>
</cities>
</state>
内华达州
拉斯维加斯
getCityList
方法在$givenState='California'
上返回正确的结果,在$givenState='Nevada'
上返回错误的结果
为什么这个数组有这种行为
如何使其工作,以便
Nevada
结果也返回?您正在执行返回false代码>在中第一次不匹配后,如果在您的foreach($state)
中第一次不匹配,那么如果您在第二次检查中得到false,您需要删除return false
,让循环检查所有项目,并在循环外的末尾返回$records
或false
,如下所示
....
if( empty($givenState){
return false;
}
foreach( $states as $state ){
if( $state->name == $givenState ){
$cities = $state->cities->city;
foreach( $cities as $city ){
$records[ trim( $state->name ) ][] = trim( $city->name );
}
}
}
return count($records) ? $records:false;
我还将空($givenState)
移动到循环上方