2015-08-13 37 views
0

我有一个API调用,它返回的数据php的数组对象字符串转换为PHP对象变量

 
stdClass Object 
(
    [data] => stdClass Object 
     (
      [TransactionId] => 10254 
      [RequestId] => 1548 
      [ResponseTime] => 0.161 
      [SSP] => test1542 
      [ErrorCode] => 0 
      [NREC] => 1 
      [BILREC] => 1 
      [TC] => 0 
      [USID] => BQ10 
      [ASInput] => stdClass Object 
       (
        [User] => test1254 
        [HostIP] => 124.1.1.1 
        [CS] => test 
        [RId] => 16546asdfs 
        [DPPAPurpose] => 2 
        [GLBPurpose] => 3 
        [PermissibleUseCode] => 3 
        [NumberOfRecords] => 100 
        [StartingRecord] => 1 
        [Version] => 32 
        [Address] => stdClass Object 
         (
          [Line1] => 125 main st 
          [City] => BROOKLYN 
          [State] => NY 
          [Zip] => 11237 
         ) 

       ) 
     ) 
) 

为了防止API的多个呼叫测试我怎样才能将它转换为普通的PHP数组对象,这样我可以使用这种格式输出到一个变量。

 

    $string = "stdClass Object 
    (
     [data] => stdClass Object 
      (
       [TransactionId] => 10254 
       [RequestId] => 1548 
       [ResponseTime] => 0.161 
       [SSP] => test1542 
       [ErrorCode] => 0 
       [NREC] => 1 
       [BILREC] => 1 
       [TC] => 0 
       [USID] => BQ10 
       [ASInput] => stdClass Object 
        (
         [User] => test1254 
         [HostIP] => 124.1.1.1 
         [CS] => test 
         [RId] => 16546asdfs 
         [DPPAPurpose] => 2 
         [GLBPurpose] => 3 
         [PermissibleUseCode] => 3 
         [NumberOfRecords] => 100 
         [StartingRecord] => 1 
         [Version] => 32 
         [Address] => stdClass Object 
          (
           [Line1] => 125 main st 
           [City] => BROOKLYN 
           [State] => NY 
           [Zip] => 11237 
          ) 

        ) 
      ) 
    )"; 
    $array_obj = somefunction($string); 

就是这样的。

+0

将它作为一个对象,为什么转换它,它的完全可用这样的 – RiggsFolly

+0

我不知道你想要做什么? – Rizier123

+0

你的意思是你想序列化它并保存到一个本地文件,这样你可以重新水化它,而无需再次调用API? – RiggsFolly

回答

0

您可以在PHP中投下stdobj到一个数组:

<?php 
$data_array = (array) $obj->data; 
+0

为什么对象最新错误 – RiggsFolly

+0

我解释这个问题的方式,提问者想要数组格式的对象。 – Jeff

+0

这就是我听到的,但是,这只会转换外部。所有的子对象仍然是对象。 –

0

我不能完全肯定,但我认为你可能会想自己构造一个对象就像一个API输出,使你可以尝试一下,而不是重复API调用。如果是这样的话,有几种方法可以做到这一点。这里是一个:

$object = new stdClass; 
$object->data = new stdClass; 
$object->data->TransactionId = 10254; 
$object->data->RequestId = 1548; 
$object->data->ResponseTime = 0.161; 
$object->data->SSP = 'test1542'; 
$object->data->ErrorCode = 0; 
$object->data->NREC = 1; 
$object->data->BILREC = 1; 
$object->data->TC = 0; 
$object->data->USID = 'BQ10'; 
$object->data->ASInput = new stdClass; 
$object->data->ASInput->User = 'test1254'; 
$object->data->ASInput->HostIP = '124.1.1.1'; 
$object->data->ASInput->CS = 'test'; 
$object->data->ASInput->RId = '16546asdfs'; 
$object->data->ASInput->DPPAPurpose = 2; 
$object->data->ASInput->GLBPurpose = 3; 
$object->data->ASInput->PermissibleUseCode = 3; 
$object->data->ASInput->NumberOfRecords = 100; 
$object->data->ASInput->StartingRecord = 1; 
$object->data->ASInput->Version = 32; 
$object->data->ASInput->Address = new stdClass; 
$object->data->ASInput->Address->Line1 = '125 main st'; 
$object->data->ASInput->Address->City = 'BROOKLYN'; 
$object->data->ASInput->Address->State = 'NY'; 
$object->data->ASInput->Address->Zip = '11237'; 
1

我试着模拟你的对象数据来理解你的问题。

Class ApiObj { 

    public $data; 

} 

Class ApiObjData { 

    public $TransactionId = 10254; 
    public $RequestId = 1548; 
    public $ResponseTime = 0.161; 
    public $SSP = 'test1542'; 
    public $ErrorCode = 0; 
    public $NREC = 1; 
    public $BILREC = 1; 
    public $TC = 0; 
    public $USID = 'BQ10'; 
    public $ASInput; 

} 

Class ApiObjDataASInput { 

    public $User = 'test1254'; 
    public $HostIP = '124.1.1.1'; 
    public $CS = 'test'; 
    public $RId = '16546asdfs'; 
    public $DPPAPurpose = 2; 
    public $GLBPurpose = 3; 
    public $PermissibleUseCode = 3; 
    public $NumberOfRecords = 100; 
    public $StartingRecord = 1; 
    public $Version = 32; 
    public $Address; 
} 

Class ApiObjDataASInputAddress { 

    public $Line1 = '125 main st'; 
    public $City = 'BROOKLYN'; 
    public $State = 'NY'; 
    public $Zip = 11237; 
} 

$api_response = new ApiObj; 
$api_response->data = new ApiObjData; 
$api_response->data->ASInput = new ApiObjDataASInput; 
$api_response->data->ASInput->Address = new ApiObjDataASInputAddress; 

echo "<pre>"; 
print_r($api_response); 

而且我有similiar输出:

ApiObj Object 
(
    [data] => ApiObjData Object 
     (
      [TransactionId] => 10254 
      [RequestId] => 1548 
      [ResponseTime] => 0.161 
      [SSP] => test1542 
      [ErrorCode] => 0 
      [NREC] => 1 
      [BILREC] => 1 
      [TC] => 0 
      [USID] => BQ10 
      [ASInput] => ApiObjDataASInput Object 
       (
        [User] => test1254 
        [HostIP] => 124.1.1.1 
        [CS] => test 
        [RId] => 16546asdfs 
        [DPPAPurpose] => 2 
        [GLBPurpose] => 3 
        [PermissibleUseCode] => 3 
        [NumberOfRecords] => 100 
        [StartingRecord] => 1 
        [Version] => 32 
        [Address] => ApiObjDataASInputAddress Object 
         (
          [Line1] => 125 main st 
          [City] => BROOKLYN 
          [State] => NY 
          [Zip] => 11237 
         ) 

       ) 

     ) 

) 

正如你所看到的,对象中的数据可以被访问只是因为他们将是一个数组内,因为对象结构匹配一个数组。他们有类似的行为。

你可以解析它,迭代它,回应它,用它做任何你想做的事,而不管它是一个对象还是数组。

也就是说,没有理由让你这样做。无论你面临的问题是什么,你提出的问题的任何答案,因为它是将不会解决它

我建议你更好地分析你的问题,并再次询问,或尝试在另一种情况下接近它。

0

我假设你给我们展示的类是一个API调用的结果,该调用返回一个JSON字符串,你通过json_decode();这样的东西运行。

$json_string = $api_get(....); 
$obj = json_decode($json_string); 

这会将json字符串创建为等效的PHP数据类型,在这种情况下为Object。

现在,如果您只更改json_decode();并将第二个参数添加为true,它将执行将json字符串转换为PHP数组,无论json字符串的原始数据类型如何。

所以不是做

$json_string = $api_get(....); 
$array = json_decode($json_string,true); 

,你会得到一个数组结果。

相关问题