2016-01-06 196 views
0

我有,我從得到一個數組,API這樣執行功能

array(
    'data' => array(
     'id' => 0, 
     'attributes' => array(
      'title' => 'title' 
     ), 
     'itemdetails' => array(
      'id' => 0, 
      'attributes' => array(
       'title' => '', 
       'images' => array(
        'original' => '', 
        'thumbnails' => array(
         'thumb', 
         'thumb' 
        ) 
       ) 
      ) 
     ) 
    ) 
); 

所以,如果我想我要做的

$array['data']['itemdetails']['attributes']['images']['thumbnails'] 

圖像是否有辦法使我能做

$array->getImageThumbnails() 

非常感謝提前!

+4

沒有,但你可以做'getImageThumbnails($陣列)',如果你定義'getImageThumbnails'。 –

+0

但是不能將數組更改爲可以在其上執行功能的對象嗎? –

+0

您可以將數組轉換爲對象,但仍需要該對象的類來定義要使用的函數。即'(object)$ array'不會隨機實現'getImageThumbnails()'。 –

回答

1

我可能會後悔,但這裏是一個簡單的實現:

class someClass { 

    public $array; 

    public function __construct($array) { 
     $this->array = $array; 
    } 

    public function getImageThumbnails() { 
     return $this->array['data']['itemdetails']['attributes']['images']['thumbnails']; 
    } 
} 

然後,只需:

$object = new someClass($array); 
$thumbs = $object->getImageThumbnails(); 
0

一種解決方案是創建一個對象,將接受這個陣列中的構造函數,在對象上定義所需的方法:

class MyImage { 
    protected $data = array(); 

    public function __construct($data) 
    { 
     $this->data = $data['data']; 
    } 

    public function getImageThumbnails() 
    { 
     return $this->data['itemdetails']['attributes']['images']['thumbnails']; 
    } 
} 

在代碼中實例化此對象o NCE你的數據:

$data = getStuffFromAPI(); 
$image = new MyImage($data); 
return $image->getImageThumbnails(); 
+0

這確實是可能的,但在我的SDK中,我已經有一個從api中提取項目的類。在這堂課中,我會對它進行一些重新編排。難道不能在這個SDK類中定義該對象的函數嗎? –

+0

而且API也是我們的,所以我可以在API類中做一些更改:) –

+0

@BrechtSchepens您可以在您的SDK類上添加一個輔助方法來實現這一點,類似於getImageThumbnails($ array)你的問題,或者你可以在你的SDK類中包含這個類,並在SDK類中完成所有這些。 – mopo922

0

如何多維數組轉換成對象:Singleton方法)

class ArrayConvertor { 

    private static $obj; 

    private __construct(){} 
    private __clone(){} 

    public static function convertToObject($array = []) { 
     self::$obj = is_array($array) ? (object) array_map("self::convertToObject",$array) : $array; 
     return self::$obj; 
    } 

    public static function getImageThumbnails() { // assuming specific array structure 
     $thumbs = null; 
     if (is_object(self::$obj)){ 
      $thumbs = self::$obj->data->itemdetails->attributes->images->thumbnails; 
     } 
     return $thumbs; 
    } 
} 

$obj = ArrayConvertor::convertToObject($arr); 

var_dump(ArrayConvertor::getImageThumbnails());