将stdObject转换为数组 - 调用函数

时间:2012-09-02 23:15:26

标签: php oop object web amazon-web-services

我的这个课有问题,特别是最后两个函数callApi($query)objectToArray($d)。这些目标是从Amazon API返回的对象返回一个数组。

我认为问题在于在这里调用另一个函数:

$arrayResponse=$this->objectToArray($response);

即使我在var_dump $arrayResponse时这样做,我仍然将它作为对象获取,并且不能执行特定于数组的操作(呃!;))。我在this siteAmazon 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;
                }
            }
}

3 个答案:

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