我需要将PHP数组转换为带有空格和引号的HTML标记属性,这是一个例子:
$array=array(
'attr1'=>'value1',
'id'=>'example',
'name'=>'john',
'class'=>'normal'
);
这是我需要达到的结果:
attr1="value1" id="example" name="john" class="normal"
有没有PHP功能呢?
我正在尝试这些:
答案 0 :(得分:6)
您也可以使用这个简单的一行代码,请参阅下面的代码::
$array=array(
'attr1'=>'value1',
'id'=>'example',
'name'=>'john',
'class'=>'normal'
);
$data = str_replace("=", '="', http_build_query($array, null, '" ', PHP_QUERY_RFC3986)).'"';
echo $data;
<强>输出强>
attr1="value1" id="example" name="john" class="normal"
答案 1 :(得分:2)
使用foreach
循环获取值和密钥。
$array = array(
'attr1'=>'value1',
'id'=>'example',
'name'=>'john',
'class'=>'normal');
foreach ($array as $key => $value) {
echo $key . '="' . htmlspecialchars($value) . '" ';
}
如果您想使用某个功能,您可以自行创建,如下所示。
$array = array(
'attr1'=>'value1',
'id'=>'example',
'name'=>'john',
'class'=>'normal');
echo buildTag($array);
function buildTag ($array) {
$tag = '';
foreach ($array as $key => $value) {
$tag .= $key . '="' . htmlspecialchars($value) . '" ';
}
return $tag;
}
答案 2 :(得分:2)
我使用以下功能:
function buildAttributes($attributes)
{
if (empty($attributes))
return '';
if (!is_array($attributes))
return $attributes;
$attributePairs = [];
foreach ($attributes as $key => $val)
{
if (is_int($key))
$attributePairs[] = $val;
else
{
$val = htmlspecialchars($val, ENT_QUOTES);
$attributePairs[] = "{$key}=\"{$val}\"";
}
}
return join(' ', $attributePairs);
}
它正确地转义特殊的html字符并支持布尔属性(没有值的属性)。以下输入:
[
'name' => 'firstname',
'value' => 'My Name',
'required'
]
将产生:
name="firstname" value="My Name" required
答案 3 :(得分:2)
您还可以结合使用array_map()和array_keys()来构建$key=$value
字符串。
用array_filter()包裹以清除空物品,并最终使用implode()将物品粘在一起。
$array = array(
'attr1' => 'value1',
'id' => 'example',
'name' => 'john',
'class' => 'normal',
'c' => null,
'd' => '',
'e' => '"abc"'
);
$attributes = implode( ' ', array_filter( array_map( function ( $key, $value ) {
return $value ? $key . '="' . htmlspecialchars( $value ) . '"' : false;
}, array_keys( $array ), $array ) ) );
echo "<div " . $attributes . "></div>";
结果:
<div attr1="value1" id="example" name="john" class="normal" e=""abc""></div>
答案 4 :(得分:0)
您可以使用此功能:
public static function arrayToStringTags( $array )
{
$tags = '';
if(!(is_array($array) && !empty($array)))
{
return $tags;
}
foreach($array as $key => $value)
{
$tags .= $key. '="'. $value. '" ';
}
return $tags;
}