SimpleXML 对象数组仅 return PHP 中的第一个值
SimpleXML object array only return the first value in PHP
问题总结
为什么 SimpleXML 对象数组只有 return 第一个值,而不是所有数组元素。
问题解释
XML结构(简体)
<states>
<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>
</states>
方法(简化)
我的 City
中有 getCityList
方法 class:
public function getCityList( $givenState = false ){
$records = array();
$states = $this->states->state;
[var_dump( $states->asXML() )]
[var_dump( $states[0]->asXML() )]
[var_dump( $states[1]->asXML() )]
foreach( $states as $state ){
if( empty( $givenState ) || ( $state->name == $givenState ) ){
$cities = $state->cities->city;
foreach( $cities as $city ){
$records[ trim( $state->name ) ][] = trim( $city->name );
}
}else{
return false;
}
}
return $records;
}
对于 $givenState = 'California'
和 $givenState = 'Nevada'
,var_dump( $states->asXML() )
给出:
<state>
<name>California</name>
<cities>
<city>
<name>LosAngeles</name>
</city>
<city>
<name>SanFrancisco</name>
</city>
</cities>
</state>
而 var_dump( $states[0]->asXML() )
给出:
<state>
<name>California</name>
<cities>
<city>
<name>LosAngeles</name>
</city>
<city>
<name>SanFrancisco</name>
</city>
</cities>
</state>
和var_dump( $states[1]->asXML() )
给出:
<state>
<name>Nevada</name>
<cities>
<city>
<name>LasVegas</name>
</city>
</cities>
</state>
getCityList
方法 return 在 $givenState = 'California'
上的正确结果和 false
在 $givenState = 'Nevada'
上的正确结果。
为什么这个数组有这种行为?
我怎样才能让它工作,以便 Nevada
结果也被 return 编辑?
您在 foreach( $states as $state )
中的 if
中第一次不匹配后正在执行 return false;
如果为什么第二次检查为假,您需要删除 return false
和让循环检查所有项目和 return $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;
我也将 empty($givenState)
移动到循环
上方
问题总结
为什么 SimpleXML 对象数组只有 return 第一个值,而不是所有数组元素。
问题解释
XML结构(简体)
<states>
<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>
</states>
方法(简化)
我的 City
中有 getCityList
方法 class:
public function getCityList( $givenState = false ){
$records = array();
$states = $this->states->state;
[var_dump( $states->asXML() )]
[var_dump( $states[0]->asXML() )]
[var_dump( $states[1]->asXML() )]
foreach( $states as $state ){
if( empty( $givenState ) || ( $state->name == $givenState ) ){
$cities = $state->cities->city;
foreach( $cities as $city ){
$records[ trim( $state->name ) ][] = trim( $city->name );
}
}else{
return false;
}
}
return $records;
}
对于 $givenState = 'California'
和 $givenState = 'Nevada'
,var_dump( $states->asXML() )
给出:
<state>
<name>California</name>
<cities>
<city>
<name>LosAngeles</name>
</city>
<city>
<name>SanFrancisco</name>
</city>
</cities>
</state>
而 var_dump( $states[0]->asXML() )
给出:
<state>
<name>California</name>
<cities>
<city>
<name>LosAngeles</name>
</city>
<city>
<name>SanFrancisco</name>
</city>
</cities>
</state>
和var_dump( $states[1]->asXML() )
给出:
<state>
<name>Nevada</name>
<cities>
<city>
<name>LasVegas</name>
</city>
</cities>
</state>
getCityList
方法 return 在 $givenState = 'California'
上的正确结果和 false
在 $givenState = 'Nevada'
上的正确结果。
为什么这个数组有这种行为?
我怎样才能让它工作,以便 Nevada
结果也被 return 编辑?
您在 foreach( $states as $state )
中的 if
中第一次不匹配后正在执行 return false;
如果为什么第二次检查为假,您需要删除 return false
和让循环检查所有项目和 return $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;
我也将 empty($givenState)
移动到循环