我正在使用操纵图像的第三方软件包。对于基本转换,它接受单个值:
n<-length(E(g))
v1x<-unlist(lapply(lapply(c(1:n),ends,graph=g),"[[",1))
v2x<-unlist(lapply(lapply(c(1:n),ends,graph=g),"[[",2))
n1x<-lapply(lapply(v1x,neighbors,graph=g,mode="all"),names)
b<-Map(as.numeric,lapply(lapply(v2x,neighbors,graph=g,mode="all"),names))
a<-mapply(rep, as.numeric(v2x), lapply(n2x,length))
opp1<-Map('*',a,b)
opp1
[[1]]
[1] 12 3 6
[[2]]
[1] 4 3
[[3]]
[1] 8 6
[[4]]
[1] 8 6
[[5]]
[1] 4 3
我正在构建的系统具有抽象级别,我需要在配置文件中定义这些值。我将配置文件作为数组加载。然后我可以遍历配置文件中的值并生成各种转换。
我的配置文件:
$image = $this->addMediaConversion('thumb');
$image->width(100);
$image->height(100);
从该配置定义这些转换的代码:
return [
'thumb' => [
'width' => 100,
'height' => 100,
],
];
SINGLE 值可以正常。
但是,该包具有针对方法采用多个属性的方法,例如:
$definitions = config('definitions');
foreach($definitions as $name => $keys) {
$image = $this->addMediaConversion($name);
foreach($keys as $key => $value) {
$image->$key($value);
}
}
有各种可用的方法具有各种不同的可接受属性。我正在寻找一个 * ELEGANT * 解决方案。我能够通过在配置文件中包含一组值,检查类型,检查该数组的长度,然后传递正确的数字来实现它,但这不是可扩展的,易于维护的,也不是优雅的。
配置:
$image = $this->addMediaConversion('thumb');
$image->fit(Manipulations::FIT_FILL, 560, 560);
代码:
return [
'thumb' => [
'fit' => [Manipulations::FIT_FILL, 560, 560]
]
];
对此最好和最优雅的解决方案是什么?
答案 0 :(得分:2)
您必须使用call_user_func_array,如下所示:
foreach($image_definitions as $name => $keys) {
// Generate the conversion
$conversion = $this->addMediaConversion($name);
// Loop through and define the attributes as they are in the config, things like ->width(), ->height()
foreach ($keys as $key => $value) {
if (is_array($value)){
call_user_func_array(array($conversion, $key), $value);
} else {
$conversion->$key($value);
}
}
}
答案 1 :(得分:0)