簡體   English   中英

PHP-從SOAP客戶端請求訪問返回的對象數組

[英]PHP - accessing a returned object array from a SOAP client request

我對PHP非常陌生。 我正在一個項目,該項目向從Java創建的WSDL發出肥皂客戶端請求,並以列表形式返回Java程序的響應。 我想從php中返回的數組對象訪問字符串,但無法這樣做。

請在下面找到我使用的代碼-

$client = new SoapClient("http://rakesh-pc:8080/WikiEdit/wikiSearchService?wsdl");
$user = $_SESSION['user'];
$params = array(
"arg0" => $user,
);
$result = $client->wikiFind($params);
var_dump($result);

我的程序得到以下var_dump結果。 抱歉,如果格式不正確。

object(stdClass)[2]                                                                     
    public 'return' => 
    array (size=41)                                                                         
    0 => string '<http://en.wikipedia.org/wiki/Anarchism>' (length=40)    
    1 => string '<http://en.wikipedia.org/wiki/Red_and_Anarchist_SkinHeads>' (length=58)    
    2 => string '<http://en.wikipedia.org/wiki/Red_and_Anarchist_Skinheads>' (length=58)     
    3 => string '<http://en.wikipedia.org/wiki/Anti-statism>' (length=43)                   
    4 => string '<http://en.wikipedia.org/wiki/Anarcho-capitalism>' (length=49)            
    5 => string '<http://en.wikipedia.org/wiki/Anarcho-Capitalism>' (length=49)           
    6 => string '<http://en.wikipedia.org/wiki/Individualist_anarchism>' (length=54)        
    7 => string '<http://en.wikipedia.org/wiki/Individualist_Anarchism>' (length=54)        
    ....

我嘗試了幾種方法。 讓我感到困惑的是,如果我給count( $result->return )訪問對象,它給出的是41,這是正確的。 但是,如果我嘗試使用相同的方法在while循環中使用echo $result->return[$i]顯示字符串,那么我只會得到一個空白頁

對於在座的某些人來說,這聽起來似乎微不足道,但是從昨天開始我一直在為此而苦苦掙扎。 任何幫助,將不勝感激。

您需要將對象轉換為數組。 我喜歡使用以下功能:

function objectToArray( $object ){

    if( !is_object( $object ) && !is_array( $object ) ){
           return $object;
    }

    if( is_object( $object ) ){
        $object = get_object_vars( $object );
    }

    return array_map( 'objectToArray', $object );
}

$myResultArray = objectToArray($result);
var_dump($myResultArray);
echo $myResultArray[0];

插入htmlspecialchars()

echo htmlspecialchars($result->return[$i], ENT_HTML5);

如何鏈接:

// Grab the raw URL
$url = substr($result->return[$i], 1, -1);
// Echo <a> incl. the text
echo "<a href='$url'>", echo htmlspecialchars($result->return[$i], ENT_HTML5), "</a>";


問題說明

請嘗試在腳本的開頭插入以下行:

 header('Content-type: text/plain'); 

我懷疑弦的尖括號是“問題”。 瀏覽器嘗試將它們解釋為HTML標記,但失敗后將其隱藏。

發送其他內容類型(例如純文本)將阻止瀏覽器解釋輸出。

您也可以嘗試使用此方法,而不是我提供的第一個方法:

 var_dump($result->return[$i]); 

嘗試:

$result =  (array)$client->wikiFind($params);
print_r($result);

您應該將屬性結果解析為數組:

print_r((array)$result->return)

我的版本

function objectToArray($data) {
    if (is_object($data)&& !is_array($data)) {
        $array = array();            
        $array[0] = $data;
        return $array;
    }else{
        if (empty($data)){
            return array();
        }else{
            return $data;
        }

    }        
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM