Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SimpleXML对象数组只返回PHP中的第一个值 问题摘要_Php_Simplexml - Fatal编程技术网

SimpleXML对象数组只返回PHP中的第一个值 问题摘要

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

为什么SimpleXML对象数组只返回第一个值,而不是所有数组元素


问题解释 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)
移动到循环上方