在阵列上执行功能


Perform functions on arrays

我有一个从中获得的数组和类似的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()

非常感谢!

我可能会后悔,但这里有一个简单的实现:

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();

一个解决方案是创建一个将在其构造函数中接受此数组的对象,并在该对象上定义您想要的方法:

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

一旦你有了数据,就在你的代码中实例化这个对象:

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

如何将多维数组转换为对象: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());