我还没有看到的东西,使用php 的array_reduce
.
<?php
$attributeCollection = [
'speed' => 'slow',
'ball' => false,
'globe' => true,
];
$attributes = array_reduce(
array_keys( $attributeCollection ) ,
fn( $carry , $name ) => vsprintf(
'%s %s="%s"' , [
$carry ,
$name ,
$attributeCollection[ $name ] ,
])
)
$markup = '<marquee' . $attributes . '></blink>';
echo $markup;
使用函数
<?php
function attributes (?array $in = null): string
{
$in ??= [];
$out = '';
$out .= array_reduce(
array_keys( $in ) ,
fn( $carry , $name ) => vsprintf(
'%s %s="%s"' ,
[
$carry ,
$name ,
$in[ $name ] ,
]
)
);
return $out;
}
$attributes = [
'speed' => 'slow',
'ball' => false,
'globe' => true,
];
$markup = '<marquee' . attributes( $attributes ) . '></blink>';
echo $markup;
支持布尔值
<?php
function attributes (?array $in = null): string
{
$in ??= [];
$out = '';
$out .= array_reduce(
array_keys( $in ) ,
fn( $carry , $name ) => is_bool($in[$name]) && true !== $in[$name]
# fn( $carry , $name ) => !$in[$name]
? $carry
: vsprintf(
'%s %s="%s"' ,
[
$carry ,
$name ,
is_bool($in[$name]) ? $name : $in[ $name ] ,
]
)
);
return $out;
}
$attributes = [
'speed' => 'slow',
'ball' => false,
'globe' => true,
];
$markup = '<marquee' . attributes( $attributes ) . '></blink>';
echo $markup;