4

このクラス、特に最後の2つの関数callApi($query)とに問題がありobjectToArray($d)ます。それらの目標は、AmazonAPIによって返されるオブジェクトから配列を返すことです。

ここで問題は、ある関数を別の関数から呼び出すことにあると思います。

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

var_dumpのときにそうして$arrayResponseも、オブジェクトとして取得し、配列固有の操作を実行できません(duh!;))。私はこのサイトAmazonライブラリ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;
                }
            }
}
4

3 に答える 3

5

わかりました、修正しました。

今後の参考のために:

stdオブジェクト全体を配列に変換する作業関数は次のようになります。

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

すべての貢献者に感謝します、

アダム

于 2012-09-06T15:22:52.500 に答える
3

以下のコードを試してください。問題が次の行にあると仮定します$this->d = get_object_vars($d);。結果を$this->dに入れget_object_vars()、変更されていない$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;
                }
            }
于 2012-09-02T23:45:50.583 に答える
1

私もこれを解決できませんでしたが、このスレッドで別の解決策を見つけました: 多次元オブジェクトを配列に変換します

短く、クラス内で競合はありません。議論は上にあり、ここにコードがあります:

$array = json_decode(json_encode($object), true);
于 2017-07-03T04:59:54.817 に答える