PHP SOAP数组求值

PHP SOAP数组求值,php,arrays,soap,cisco-axl,Php,Arrays,Soap,Cisco Axl,我正在编写以下我希望是一个简单的脚本。我正在使用Cisco AXL WSDL访问我的Cisco CUPS服务器运行SQL查询,循环查询结果,然后将结果反馈到另一个步骤中,以将返回的行更新为特定值。然而,当我得到的SOAP响应不同于单行(数组对象)或多行(数组中的数组)时,我面临一个挑战 这是我现在的脚本,我只是想在进行更复杂的操作之前,通过循环和回显我得到的内容 <?php $client = new SoapClient("/var/www/AXLAPI.wsdl", a

我正在编写以下我希望是一个简单的脚本。我正在使用Cisco AXL WSDL访问我的Cisco CUPS服务器运行SQL查询,循环查询结果,然后将结果反馈到另一个步骤中,以将返回的行更新为特定值。然而,当我得到的SOAP响应不同于单行(数组对象)或多行(数组中的数组)时,我面临一个挑战

这是我现在的脚本,我只是想在进行更复杂的操作之前,通过循环和回显我得到的内容

<?php
    $client = new SoapClient("/var/www/AXLAPI.wsdl",
    array('trace'=>true,
    'exceptions'=>true,
    'location'=>"https://cups-test:8443/axl",
    'login'=>'admin',
    'password'=>'password',
    ));
    $response = $client->executeSQLQuery(array("sql"=>"select pkid from epasenduser where enablemoc = 't'"));
    //         var_dump($response);
    foreach ($response as $row){
    //              var_dump($row->row);
    echo("PKID: ".$row->pkid)."<br>";
    }
?>
对于多行:

object(stdClass)#2 (1) {
["return"]=>
    object(stdClass)#3 (1) {
    ["row"]=>
    array(2) {
    [0]=>
    object(stdClass)#4 (1) {
    ["pkid"]=>
    string(36) "fa0540f7-8e75-481b-a193-7a06d7f601a8"
    }
    [1]=>
    object(stdClass)#5 (1) {
    ["pkid"]=>
    string(36) "fa0c8c7a-79be-4667-ae70-c3e773908b52"
    }
    }
    }
}
这里的挑战是,由于对象在SOAP响应中多次返回,我猜PHP每次看到它时都会分配一个递增的整数值。因此,如果我想直接引用PKID,我会得到两个不同的语句:

对于单个项目,它是:

foreach ($response->return as $row){
    var_dump($row->pkid);
}
对于多个项目,它是:

foreach ($response->return->row as $row){
    var_dump($row->pkid);
}

所以问题是,有没有一种方法可以让我在foreach循环中只返回PKID值,而不用提前评估数组?希望这是有道理的,首先是自我承认的网络工程师,其次是幼稚的“开发人员”。

所有这些都归结为让php变得不那么智能,并确保我总是能得到一个数组

在这里写一篇关于它的精彩文章:

最重要的是更改我的连接设置:

        $client = new SoapClient("/var/www/AXLAPI.wsdl",
            array('trace'=>true,
           'exceptions'=>true,
           'features'=>SOAP_SINGLE_ELEMENT_ARRAYS,
           'location'=>"https://cups-test:8443/axl",
           'login'=>'admin',
           'password'=>'password',
        ));
包括
'features'=>SOAP\u SINGLE\u ELEMENT\u数组,
命令确保即使在单个结果中,它也被构建为数组而不是对象

        $client = new SoapClient("/var/www/AXLAPI.wsdl",
            array('trace'=>true,
           'exceptions'=>true,
           'features'=>SOAP_SINGLE_ELEMENT_ARRAYS,
           'location'=>"https://cups-test:8443/axl",
           'login'=>'admin',
           'password'=>'password',
        ));