将PHP数组对象字符串转换为PHP对象变量


convert the php array object string to php object variable

我有一个api调用返回数据

<>之前stdClass对象([data] => stdClass对象([TransactionId] => 10254[requesttid] => 1548[ResponseTime] => 0.161[SSP] => test1542[ErrorCode] => 0[nrec] => 1[bilrec] => 1[tc] => 0[usid] => bq10[ASInput] => stdClass对象([User] => test1254[HostIP] => 124.1.1.1[CS] =>测试[RId] => 16546asdfs[dppappose] => 2[glb目的]=> 3[permissionusecode] => 3[NumberOfRecords] => 100[StartingRecord] => 1[Version] => 32[Address] => stdClass对象([Line1] => 125[城市]=>布鲁克林[State] =>纽约州[Zip] => 11237))))之前

为了防止多次调用api进行测试,我如何将其转换为常规的php数组对象,以便我可以将这种格式的输出用于变量

<>之前$string = "stdClass对象"([data] => stdClass对象([TransactionId] => 10254[requesttid] => 1548[ResponseTime] => 0.161[SSP] => test1542[ErrorCode] => 0[nrec] => 1[bilrec] => 1[tc] => 0[usid] => bq10[ASInput] => stdClass对象([User] => test1254[HostIP] => 124.1.1.1[CS] =>测试[RId] => 16546asdfs[dppappose] => 2[glb目的]=> 3[permissionusecode] => 3[NumberOfRecords] => 100[StartingRecord] => 1[Version] => 32[Address] => stdClass对象([Line1] => 125[城市]=>布鲁克林[State] =>纽约州[Zip] => 11237))))";$array_obj = somefunction($string);之前

差不多。

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

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);

我得到了类似的输出:

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
                        )
                )
        )
)
如您所见,可以像访问数组一样访问对象中的数据,因为对象结构与数组结构匹配。它们有相似的行为。

你可以解析它,迭代它,回显它,对它做任何你想做的事情,不管它是对象还是数组。

也就是说,你没有理由那样做。无论你面对的是什么问题,你的问题的任何答案都不能解决它

我建议你更好地分析你的问题,然后再问一次,或者试着在另一种情况下解决这个问题。

在PHP中可以将stdobj类型强制转换为数组:

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

我不完全确定,但我认为您可能想要自己构建一个对象,就像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';

我假设您向我们展示的类是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);

你将得到一个数组作为结果