任务是获得这个:
Nel mezzo del cammin
di nostra vita
来自:
nel-MEZzo---del-cammin, <strong>BRAKELINE</strong>di nostra-vita.
我真的厌倦了这种语法:
function custom_function($v){
return str_replace("BRAKELINE","\n",$v);
}
$SRC = ' nel-MEZzo---del-cammin, <strong>BRAKELINE</strong>di nostra-vita. ';
$v = ucfirst(trim(strtolower(custom_function(preg_replace('/[^\w]+/',"\040",strip_tags($SRC))))));
echo $v;
我尝试了一些新的东西:
function ifuncs($argv=NULL,$funcs=array()){
foreach($funcs as $func){
$argv = $func($argv);
}
return $argv;
}
$SRC = ' nel-MEZzo---del-cammin, <strong>BRAKELINE</strong>di nostra-vita. ';
$v = ifuncs(
$SRC,
array(
'strip_tags',
'f1' => function($v){ return preg_replace('/[^\w]+/',"\040",$v); },
'f2' => function($v){
return str_replace("BRAKELINE","\n",$v);
},
'strtolower',
'trim',
'ucfirst'
)
);
echo $v;
它的效果非常好,但我想知道是否有更好的方法(也就是现有的库)来做到这一点。
答案 0 :(得分:3)
你所写的是array_reduce()
如何运作:
$fns = array(
'strip_tags',
function($v) {
return preg_replace('/[^\w]+/', ' ', $v);
},
function($v) {
return str_replace('BRAKELINE', "\n", $v);
},
'strtolower',
'trim',
'ucfirst',
);
$input = ' nel-MEZzo---del-cammin, <strong>BRAKELINE</strong>di nostra-vita. ';
$v = array_reduce($fns, function($result, $fn) {
return $fn($result);
}, $input));
适用于您当前的职能:
function ifuncs(array $funcs, $input = null)
{
return array_reduce($funcs, function($result, $fn) {
return $fn($result);
}, $input));
}
答案 1 :(得分:0)
不短,但更优雅。
function fns($input=NULL,$fns=array()){
$input = array_reduce($fns, function($result, $fn) {
return $fn($result);
}, $input);
return $input;
}