2016-01-06 3 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 сть у вас есть данные:

$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()); 
Смежные вопросы