将PHP数组转换为由空格分隔的HTML标记属性

时间:2017-05-30 13:54:25

标签: php html tags

我需要将PHP数组转换为带有空格和引号的HTML标记属性,这是一个例子:

$array=array(
    'attr1'=>'value1',
    'id'=>'example',
    'name'=>'john',
    'class'=>'normal'
);

这是我需要达到的结果:

attr1="value1" id="example" name="john" class="normal"

有没有PHP功能呢?

我正在尝试这些:

  • http_build_query
  • array_walk

5 个答案:

答案 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="&quot;abc&quot;"></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;
}