【问题标题】:Converting stdObject into an array - calling function将 stdObject 转换为数组 - 调用函数
【发布时间】:2012-09-02 23:15:25
【问题描述】:

我对这个类有疑问,尤其是最后两个函数callApi($query)objectToArray($d)。其目标是从 Amazon API 返回的对象中返回一个数组。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    好的,已解决。

    供将来参考:

    将整个 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;
                    }
                }
    

    感谢所有贡献者,

    亚当

    【讨论】:

    • 我认为它已经稍微改变了,所以它不使用 FUNCTION 魔法常数
    • 这对我不起作用。我得到错误:“未定义的变量:这个”......但我刚刚意识到这是因为这个版本是为用作类中的方法而编写的。如果您想将其用作非分类函数,则以下版本 (FAngel) 很有用。
    【解决方案2】:

    试试下面的代码。假设问题是因为这一行:$this-&gt;d = get_object_vars($d);。您将get_object_vars() 结果放入 $this->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;
                    }
                }
    

    【讨论】:

    • 感谢@FAngel 得到以下响应“警告:array_map() 期望参数 1 是有效回调,未找到函数 'objectToArray' 或 C:\xampp\htdocs\msc\ 中的函数名称无效SourcesClasses.php 第 151 行 NULL 代码返回结果数组'第 151 行' return array_map(FUNCTION, $d);'
    • 放到课外或者看看这个page。坦率地说,从未尝试过这样做,但据我了解,您需要将 return array_map(__FUNCTION__, $d); 替换为 return array_map(array($this, 'objectToArray'), $d);
    • 谢谢@FAngel,我想我们越来越近了——有了这个改变,函数返回对象数组,但我真正需要的是一个正常的关联数组,它由我链接到的测试代码输出在第一篇文章中(亚马逊图书馆和具有功能的网站)。修复的任何想法?最好的,亚当
    【解决方案3】:

    我也无法解决此问题,但在此线程中找到了替代解决方案:Convert multidimensional objects to array

    它更短,并且类内没有冲突。讨论在上面,代码如下:

    $array = json_decode(json_encode($object), true);
    

    【讨论】:

      猜你喜欢
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2020-07-18
      相关资源
      最近更新 更多