我的这个课有问题,特别是最后两个函数callApi($query)
和objectToArray($d)
。这些目标是从Amazon API返回的对象返回一个数组。
我认为问题在于在这里调用另一个函数:
$arrayResponse=$this->objectToArray($response);
即使我在var_dump $arrayResponse
时这样做,我仍然将它作为对象获取,并且不能执行特定于数组的操作(呃!;))。我在this site和Amazon Library上找到了objectToArray()
。
当我单独测试它时,它工作正常但在将它放入项目后我仍然得到了对象。
我只是以错误的方式调用函数,所以它不会转换它吗?
提前谢谢你,
亚当
class Amazon extends Source implements ICallsApi{
function __construct(){
$this->impact = 55;
$this->side = "supply";
echo "<p>I am Amazon</p>";
echo "<p>and my impact = ". $this->impact."</p>";
}
private function FormulateQuery($query){
echo "Formulate query for Amazon API and return it";
}
//Returns the array records from amazon of a given keyword
public function callApi($query)
{
$client = new AmazonECS('dataRemoved', 'dataRemoved', 'co.uk', 'dataRemoved');
$response = $client->category('Books')->search($query);
//var_dump($response);
//echo "<pre>";
//print_r($response);
//echo "</pre>";
$arrayResponse=$this->objectToArray($response);
var_dump($arrayResponse);
//echo "<pre>";
//print_r($arrayResponse);
//echo "</pre>";
echo "code returns an array of results";
// return $arrayResponse;
} //objectToArray($d) found online
public function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$this->d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
}
答案 0 :(得分:5)
好的,修好了。
供将来参考:
将整个std Object转换为数组的工作函数如下所示:
public function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(array($this, 'objectToArray'), $d);
//$this->d = get_object_vars($d);
}
else {
// Return array
return $d;
}
}
感谢所有贡献者,
亚当
答案 1 :(得分:3)
尝试下面的代码。假设问题是由于这一行:$this->d = get_object_vars($d);
。您将get_object_vars()
结果放入$ this-&gt; d并返回未更改的$ d;
public function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
答案 2 :(得分:1)
我也无法解决这个问题,但在这个帖子中找到了另一种解决方案:Convert multidimensional objects to array。
它更短,并且课堂上没有冲突。讨论在上面,这是代码:
$array = json_decode(json_encode($object), true);