我有一个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);
你将得到一个数组作为结果